├── .gitattributes ├── .gitignore ├── ChannelList.py ├── ChannelListThread.py ├── LICENSE.txt ├── README.md ├── Release Notes 4.5.0.md ├── Release Notes 4.5.1.md ├── Release Notes 4.5.2.md ├── Release Notes 5.0.0.md ├── Release Notes.md ├── Troubleshooting.md ├── VideoParserFFProbe.py ├── addon.xml ├── changelog.txt ├── default.py ├── fanart.jpg ├── icon.png ├── resources ├── fonts │ └── NotoSans-Regular.ttf ├── images │ ├── Default.png │ ├── Default2.png │ ├── label_0.png │ ├── label_1.png │ ├── label_2.png │ ├── label_3.png │ ├── label_4.png │ ├── label_5.png │ ├── label_6.png │ ├── label_7.png │ ├── label_8.png │ └── label_9.png ├── language │ ├── resource.language.en_gb │ │ └── strings.po │ ├── resource.language.he_il │ │ └── strings.po │ └── resource.language.pt_br │ │ └── strings.po ├── lib │ ├── AVIParser.py │ ├── AdvancedConfig.py │ ├── Channel.py │ ├── ChannelList.py │ ├── ChannelListThread.py │ ├── Config.py │ ├── EPGWindow.py │ ├── FLVParser.py │ ├── FileAccess.py │ ├── Globals.py │ ├── MKVParser.py │ ├── MP4Parser.py │ ├── Migrate.py │ ├── MyFont.py │ ├── Overlay.py │ ├── Playlist.py │ ├── ResetWatched.py │ ├── Rules.py │ ├── Settings.py │ ├── TSParser.py │ ├── VideoParser.py │ └── VideoParserFFProbe.py ├── logos │ ├── A&E.png │ ├── ABC (US).png │ ├── ABC Family.png │ ├── ABC.png │ ├── AMC.png │ ├── ARD.png │ ├── AXN Beyond.png │ ├── AXN SciFi.png │ ├── Action Max.png │ ├── Action Movies.png │ ├── Action TV.png │ ├── Action and Adventure TV.png │ ├── Action.png │ ├── Adult Movies.png │ ├── Adventure Movies.png │ ├── Adventure TV.png │ ├── Adventure.png │ ├── Amazon Prime Video.png │ ├── Amazon.png │ ├── Animal Planet.png │ ├── Animation Movies.png │ ├── Animation TV.png │ ├── Animation.png │ ├── Animax.png │ ├── Anime Movies.png │ ├── Anime TV.png │ ├── Apple TV+.png │ ├── BBC 2.png │ ├── BBC Four.png │ ├── BBC HD.png │ ├── BBC Knowledge.png │ ├── BBC One.png │ ├── BBC Three.png │ ├── BBC Two.png │ ├── BBC.png │ ├── BET.png │ ├── Biography Movies.png │ ├── Biography.png │ ├── Boomerang.png │ ├── CBC.png │ ├── CBS.png │ ├── CN.png │ ├── CTV.png │ ├── Canal+ Drama.png │ ├── Cartoon Network.png │ ├── Channel 4.png │ ├── Channel Anime.png │ ├── Children TV.png │ ├── Chiller.png │ ├── Christmas TV.png │ ├── Christmas.png │ ├── Cine FX.png │ ├── Cine First.png │ ├── Cinemax HD.png │ ├── Cinemax.png │ ├── City TV.png │ ├── Comedy Central.png │ ├── Comedy Movies.png │ ├── Comedy TV.png │ ├── Comedy.png │ ├── ComedyCentral.png │ ├── Comet.png │ ├── Concert Live.png │ ├── Crime Movies.png │ ├── Crime TV.png │ ├── Crime.png │ ├── DC Comics.png │ ├── DJs from Mars.png │ ├── Discovery HD.png │ ├── Discovery.png │ ├── Disney Channel New.png │ ├── Disney Channel.png │ ├── Disney Sig.png │ ├── Disney.png │ ├── Documentary Movies.png │ ├── Documentary TV.png │ ├── Documentary.png │ ├── Dourama.png │ ├── Drama Movies.png │ ├── Drama TV.png │ ├── Drama.png │ ├── Dreamworks SKG.png │ ├── E!.png │ ├── Encore.png │ ├── Energy.png │ ├── FOX (US).png │ ├── FOX Life.png │ ├── FOX.png │ ├── FX.png │ ├── Family Movies.png │ ├── Family.png │ ├── Fantasy Movies.png │ ├── Fantasy TV.png │ ├── Fantasy.png │ ├── FitTV.png │ ├── Five.png │ ├── Food Network.png │ ├── Foreign Movies.png │ ├── Foreign TV.png │ ├── Fox Kids.png │ ├── Frisbee.png │ ├── G4.png │ ├── GTtv.png │ ├── Global.png │ ├── Grenade.png │ ├── HBO Comedy.png │ ├── HBO.png │ ├── Halloween.png │ ├── Historical Movies.png │ ├── History HD.png │ ├── History Movies.png │ ├── History TV.png │ ├── History.png │ ├── Horror Movies.png │ ├── Horror TV.png │ ├── Horror.png │ ├── IMAX.png │ ├── ITV1.png │ ├── Kerrang!.png │ ├── Kid TV.png │ ├── Kids TV.png │ ├── LA Muscle.png │ ├── Lifetime.png │ ├── Live Music.png │ ├── MGM HD.png │ ├── MTV Classic.png │ ├── MTV Dance.png │ ├── MTV Trax.png │ ├── MTV.png │ ├── Mad.png │ ├── Marvel Studios.png │ ├── Marvel.png │ ├── MeTV.png │ ├── Mini-Series TV.png │ ├── Mobsters.png │ ├── Movies24.png │ ├── Music Movies.png │ ├── Mystery Movies.png │ ├── Mystery TV.png │ ├── Mystery.png │ ├── NBC.png │ ├── National Geographic HD.png │ ├── National Geographic.png │ ├── Nature Channel.png │ ├── Nature.png │ ├── Netflix.png │ ├── Nickelodeon.png │ ├── Nova Cinema 1.png │ ├── Nova Cinema.png │ ├── Oldies.png │ ├── Orange Cinemax.png │ ├── Oscar Cinema.png │ ├── PBS.png │ ├── Paramount Comedy.png │ ├── Pixar.png │ ├── Premium Cinema Energy.png │ ├── Premium Cinema.png │ ├── Q Music.png │ ├── Quest.png │ ├── Quibi.png │ ├── Qulli.png │ ├── Real TV.png │ ├── Reality TV TV.png │ ├── Reality TV.png │ ├── Recent Releases.png │ ├── Romance Movies.png │ ├── Romance TV.png │ ├── Romance.png │ ├── Sci-Fi HD.png │ ├── Sci-Fi Movies.png │ ├── Sci-Fi TV.png │ ├── Sci-Fi.png │ ├── SciFi.png │ ├── Science Channel.png │ ├── Science Fiction Movies.png │ ├── Science Fiction.png │ ├── Science-Fiction TV.png │ ├── Science.png │ ├── Showcase.png │ ├── Showtime.png │ ├── Silver.png │ ├── Sketchy.png │ ├── Sky Movies HD Family.png │ ├── Sky1.png │ ├── Sony Max.png │ ├── Space.png │ ├── Spielberg.png │ ├── Spike TV.png │ ├── Sports Movies.png │ ├── Star Movies HD.png │ ├── Star Plus.png │ ├── Star Wars.png │ ├── Starz!.png │ ├── Starz.png │ ├── Suspense Movies.png │ ├── Suspense TV.png │ ├── Suspense.png │ ├── Syfy.png │ ├── Syndicated.png │ ├── TCM.png │ ├── TED.png │ ├── TLC.png │ ├── TNT.png │ ├── TV Land.png │ ├── TV Movie Movies.png │ ├── TV Movie.png │ ├── The 2000s.png │ ├── The 80s.png │ ├── The 90s.png │ ├── The CW.png │ ├── The Comedy Channel.png │ ├── The Poker Channel.png │ ├── Thriller Movies.png │ ├── Thriller TV.png │ ├── Thriller.png │ ├── Travel Channel.png │ ├── Turbo.png │ ├── Turner.png │ ├── UPN.png │ ├── USA Network.png │ ├── USA.png │ ├── Universal Channel.png │ ├── Universal Network Television.png │ ├── VH1.png │ ├── Versus.png │ ├── War Movies.png │ ├── War TV.png │ ├── Warner Bros.png │ ├── Western Movies.png │ ├── Western TV.png │ ├── Western.png │ ├── WorshipTV.png │ └── Zumba Fitness.png ├── screenshots │ ├── Commercial.png │ ├── EPG1.png │ ├── EPG2.png │ ├── screenshot-01.png │ └── screenshot-02.png ├── settings.xml └── skins │ ├── default │ ├── 1080i │ │ ├── script.pseudotv.AdvancedConfig.xml │ │ ├── script.pseudotv.ChannelConfig.xml │ │ ├── script.pseudotv.EPG.xml │ │ ├── script.pseudotv.EPG3.xml │ │ ├── script.pseudotv.EPG6.xml │ │ ├── script.pseudotv.EPG9.xml │ │ ├── script.pseudotv.TVOverlay.xml │ │ └── xscript.pseudotv.EPG.xml │ └── media │ │ ├── Default.png │ │ ├── pstvButtonFocus.png │ │ ├── pstvButtonFocusShort.png │ │ ├── pstvButtonNoFocus.png │ │ ├── pstvButtonNoFocusAlt1.png │ │ ├── pstvButtonNoFocusAlt1Short.png │ │ ├── pstvButtonNoFocusAlt2.png │ │ ├── pstvButtonNoFocusAlt2Short.png │ │ ├── pstvButtonNoFocusAlt3.png │ │ ├── pstvButtonNoFocusAlt3Short.png │ │ ├── pstvButtonNoFocusShort.png │ │ ├── pstvTimeBar.png │ │ ├── ptv_DefaultVideo.png │ │ ├── ptv_InfoBar.png │ │ ├── ptv_LogoBack.png │ │ ├── ptv_black.png │ │ ├── ptv_clock.png │ │ ├── ptv_flags │ │ ├── audiochannel │ │ │ ├── 0.png │ │ │ ├── 1.png │ │ │ ├── 10.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ └── 8.png │ │ ├── audiocodec │ │ │ ├── aac.png │ │ │ ├── aac_latm.png │ │ │ ├── ac3.png │ │ │ ├── aif.png │ │ │ ├── aifc.png │ │ │ ├── aiff.png │ │ │ ├── alac.png │ │ │ ├── ape.png │ │ │ ├── avc.png │ │ │ ├── cdda.png │ │ │ ├── dca.png │ │ │ ├── dolbydigital.png │ │ │ ├── dts.png │ │ │ ├── dtshd_hra.png │ │ │ ├── dtshd_ma.png │ │ │ ├── dtsma.png │ │ │ ├── eac3.png │ │ │ ├── flac.png │ │ │ ├── m4a.png │ │ │ ├── mp1.png │ │ │ ├── mp2.png │ │ │ ├── mp3.png │ │ │ ├── mp3float.png │ │ │ ├── ogg.png │ │ │ ├── opus.png │ │ │ ├── pcm.png │ │ │ ├── pcm_bluray.png │ │ │ ├── pcm_s16le.png │ │ │ ├── pcm_s24le.png │ │ │ ├── truehd.png │ │ │ ├── vorbis.png │ │ │ ├── wav.png │ │ │ ├── wavpack.png │ │ │ ├── wma.png │ │ │ ├── wmapro.png │ │ │ └── wmav2.png │ │ ├── ptv_cc.png │ │ ├── videocodec │ │ │ ├── avc1.png │ │ │ ├── bluray.png │ │ │ ├── div3.png │ │ │ ├── divx.png │ │ │ ├── dvd.png │ │ │ ├── dx50.png │ │ │ ├── flv.png │ │ │ ├── h264.png │ │ │ ├── hddvd.png │ │ │ ├── hdmv.png │ │ │ ├── hev1.png │ │ │ ├── hevc.png │ │ │ ├── hvc1.png │ │ │ ├── mp4v.png │ │ │ ├── mpeg1.png │ │ │ ├── mpeg1video.png │ │ │ ├── mpeg2.png │ │ │ ├── mpeg2video.png │ │ │ ├── mpeg4.png │ │ │ ├── tv.png │ │ │ ├── vc-1.png │ │ │ ├── vc1.png │ │ │ ├── vhs.png │ │ │ ├── vp8.png │ │ │ ├── vp9.png │ │ │ ├── wmv.png │ │ │ ├── wmv3.png │ │ │ ├── wvc1.png │ │ │ └── xvid.png │ │ └── videoresolution │ │ │ ├── 1080.png │ │ │ ├── 480.png │ │ │ ├── 4k.png │ │ │ ├── 540.png │ │ │ ├── 576.png │ │ │ └── 720.png │ │ ├── ptv_logo.png │ │ ├── ptv_nub_bar.png │ │ ├── ptv_settings │ │ ├── ptv_arrow-down.png │ │ ├── ptv_arrow-up.png │ │ ├── ptv_dialog-bg-solid.png │ │ ├── ptv_dialogbutton-fo.png │ │ ├── ptv_dialogbutton-nofo.png │ │ ├── ptv_focus.png │ │ ├── ptv_radio-button-off.png │ │ ├── ptv_radio-button-on.png │ │ ├── ptv_separator.png │ │ └── ptv_white70.png │ │ ├── ptv_thumb_shadow.png │ │ └── ptv_white50.png │ └── skin.estuary │ ├── media │ ├── Default.png │ ├── pstvButtonFocus.png │ ├── pstvButtonFocusShort.png │ ├── pstvButtonNoFocus.png │ ├── pstvButtonNoFocusAlt1.png │ ├── pstvButtonNoFocusAlt1Short.png │ ├── pstvButtonNoFocusAlt2.png │ ├── pstvButtonNoFocusAlt2Short.png │ ├── pstvButtonNoFocusAlt3.png │ ├── pstvButtonNoFocusAlt3Short.png │ ├── pstvButtonNoFocusShort.png │ ├── pstvTimeBar.png │ ├── ptv_InfoBar.png │ ├── ptv_LogoBack.png │ ├── ptv_clock.png │ ├── ptv_logo.png │ ├── ptv_separator.png │ └── ptv_thumb_shadow.png │ └── xml │ ├── script.pseudotv.AdvancedConfig.xml │ ├── script.pseudotv.ChannelConfig.xml │ ├── script.pseudotv.EPG.xml │ ├── script.pseudotv.EPG3.xml │ ├── script.pseudotv.EPG6.xml │ ├── script.pseudotv.EPG9.xml │ └── script.pseudotv.TVOverlay.xml └── service.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyo 2 | *Thumbs.db 3 | .vscode 4 | SyncToy*.* 5 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | PseudoTV code and artworkis is licensed under 2 | GNU General Public License (GPL), Version 3.0 3 | You can find the license details here: . 4 | 5 | Estuary artwork is licensed under a 6 | Creative Commons Attribution-ShareAlike 4.0 Unported License. 7 | You can find the license details here: . 8 | 9 | Fonts are licensed under 10 | Noto: SIL OFL 1.1 - -------------------------------------------------------------------------------- /Release Notes 4.5.2.md: -------------------------------------------------------------------------------- 1 | ![PseudoTV logo](https://github.com/fnord12/script.pseudotv/blob/master/resources/images/Default.png?raw=true "PseudoTV Logo") 2 | 3 | PseudoTV 4.5.2 update - fnord12 branch 4 | ====== 5 | 6 | This release adds a few minor features. No progress on the Reset Problem (Known Issue #10), unfortunately. 7 | 8 | ### Alternate Colors for EPG 9 | 10 | As requested (as a side issue on issue #14), it's now possible to designate that channels on the episode guide appear in colors. In Settings under Visuals, you can now input a comma-separated list for three alternate colors. The idea is that you can designate all your movie channels as one color, all your cartoon channels as another, etc.. By default, the new colors are blue, purple, and green. But you can modify these yourself by editing the image files under \resources\skins\default\media. Note that - extending an idea from 4.5.0 - there are also options for short videos in each of the alternate colors, in case you want your commercials (for example) to be different than the regular programming. 11 | 12 | ### EPG Rowcount 13 | 14 | Instead of just the standard 6 channel rows in the episode guide, it's now possible to specify under Settings>Visuals whether you'd like by default to see 3, 6, or 9 rows. The 3 row grid also hides the info and header, allowing you to see more of the video. 3 is useful if you want to keep watching something while you see what else is on, and 9 obviously allows you to see more of your channel options at once. In addition to the default setting, you can toggle the number of rows while the guide is up. The toggle button is mapped to your ACTION_NEXT_PICTURE key, if you have one (it's normally used for Picture Slideshows in Kodi). If not you can map it to any key by editing your Keymap in the GLOBAL section (NOT the FullscreenVideo section) like so (mapping to the W button in my example, you can pick what you want): 15 | 16 | ``` 17 | 18 | 19 | 20 | 21 | 22 | NextPicture 23 | 24 | 25 | 26 | 27 | 28 | 29 | ``` 30 | 31 | Note that this feature required creation of new EGP.xml skin files under \resources\skins\default\1080i. If you're using a customized skin for PSTV, you'll have to copy my modifications (adding and changing the placement of the channel rows). 32 | 33 | 34 | ### Change Language 35 | 36 | This feature gives you the option to have a channel always change to a designated audio language (if available). I had two use cases for this. The first is that my wife likes to keep her high school French from getting rusty, so i created a channel with cartoons that happened to have a french audio track. This feature ensures that the channel will always switch to the French audio track. Another use case is that for my anime channels, I always want the audio to be in Japanese (and then my separate Autosub add-on will enable the subtitles). In the first use case, I didn't want Kodi to play the cartoons in French when playing them on another channel or directly in Kodi (by default, Kodi will retain the last video settings, including the language stream). So it's possible to set a return language, the language to switch back to when leaving the channel. So if you input "fre, eng" it will change to French when switching to the channel, and switch back to English when leaving the channel. If you don't need a switch-back, you can just input a single three-letter code. 37 | 38 | There are two sets of inputs for this under Settings>Tweaks, so that you can designate channels for uo to two languages. For the Channels input, you can input a comma-separated list of channel numbers. For the Change To Change Back field, input a 3 letter language code, or two 3 letter codes separated by a comma if you want to use the Change Back feature. 39 | 40 | ### Minor fixes 41 | 42 | * If for some reason Kodi is unable to create a channel bug/watermark, it will try using any existing watermark files before using the generic PSTV logo (see issue #16). 43 | 44 | * For the Don't Include A Show advanced rule, the system will provide a list of your shows to pick from, instead of having to manually type the show name (see issue #12). 45 | 46 | * Fixed a very minor issue related to the Channel Logo advanced rule where it was trying to use deprecated Kodi language values for Yes and No that no longer exist. I've instead hard-coded the choices to "Yes" and "No". Sorry to non-English users but it's still an improvement from the blank values! I doubt anyone was really affected by this but it's something i ran into when addressing the above Don't Include A Show advanced rule improvement. 47 | 48 | * Fixed a bug in Reset Watch where it was failing to reset videos added during a session. 49 | -------------------------------------------------------------------------------- /Release Notes 5.0.0.md: -------------------------------------------------------------------------------- 1 | ![PseudoTV logo](https://github.com/fnord12/script.pseudotv/blob/master/resources/images/Default.png?raw=true "PseudoTV Logo") 2 | 3 | PseudoTV 5.0.0 update - fnord12 branch 4 | ====== 5 | 6 | This release brings PseudoTV to Python 3 and updates it to work with Kodi v21 Omega. It mostly functions the same as always with an important note regarding file lengths. It is strongly recommended that you instal ffmpeg if using this addon. See below for details. 7 | 8 | Users on version 4.x/Kodi 18 should be able to back-up their current PseudoTV user data (see the Troubleshooting doc) and then restore it to the 5.x/Kodi 21 folder to retain their current channels. 9 | 10 | ### File Lengths 11 | 12 | The problem: A lot of videos floating around have improper headers or other slight problems. The videoes are usually playable but Kodi does not get their length on the first pass (when the video is first imported). Kodi usually correctly gets their lengths on a second pass (when the video is first visible in a skin), but that duration data is not stored in a place where PseudoTV can get them from a JSON query. YOU PROBABLY HAVE MORE VIDEOS IN YOUR LIBRARY LIKE THIS THAN YOU REALIZE. PseudoTV needs the correct video length in order to properly schedule the shows and display them on the EPG. Additionally there are Directory channels which contain videos that Kodi doesn't have in the database. 13 | 14 | PseudoTV used to try to manually check the video lengths but it could only do so for certain file formats / codecs and increasingly it wasn't working anymore. Plus it was slow to have to recheck those lengths every time. 15 | 16 | So with this version I have dropped to old way to check for file lengths and am instead using FFMPEG. This requires you to have FFMPEG properly installed on your OS. FFMPEG is free, open source, widely used, and multi-platform. For Linux it should be there by default. For Windows you will have to download it and set the proper path. Here are instructions for Windows 10 & 11: https://windowsloop.com/install-ffmpeg-windows-10/ 17 | 18 | I've found you have to reboot your computer after following the above instructions. 19 | 20 | After finding a duration for a video using this method, PseudoTV will now write the duration to file, which will mean that next time it shouldn't have to use FFMPEG for that video and it will be able to load faster. So the first time or maybe first few times you run PseudoTV it may take a little longer to start but it should be much faster after most of your videos have already been checked. 21 | 22 | If you choose to not install FFMPEG it you should still be able to run PseudoTV but any videos without proper durations in Kodi will be skipped. You still have the option to default such videos to a specified length - see the Settings>Performance tab. The downside of this is that your EPG and the upcoming schedule may not be accurate if the default length is very different than the atualy video lengths (it's not catastrophic; it just means that the wrong show may load when clicking on the EPG). 23 | 24 | ### Other minor updates 25 | 26 | - Reset Watched (prevents PseudoTV from updating your videos' Playcount and Resume data) is now on by default. It can be turned off in the General settings area. It is now possible to exclude channels from getting reset for those of you who want PseudoTV to keep track of your watched progress for some channels but not others. 27 | 28 | - Now when copying, swapping, inserting, or deleting channels in Channel Configuration, all of the comma-separated channel lists in the main settings area will get updated. This relates to all of the settings in the main settings area where you input a list of comma separated channels: Exclude from reset, alternate color blocks, the change languages settings, the hide titles options, don't display individual blocks. 29 | 30 | ### Limitations 31 | 32 | - See above regarding file lengths. If you don't install FFMPEG you may find quite a few videos are not loaded (or are using the default values if set). 33 | 34 | - It is no longer possible to use the mouse to select a show from the EPG. You have to use the arrows and Enter key. This is due to a change in Kodi that I haven't figured out; I'll have to ask on the forum if this matters to people. 35 | 36 | - The problems with using Resume mode as noted in earlier Release Notes remain. In particular, the starting channel will often reset to the beginning of the show/movie. Workaround is to set your start channel to something where resetting won't matter. 37 | 38 | 39 | ### Help 40 | 41 | - See the other release notes docs for updates since SteveB's branch. 42 | - See the Readme file for explanations of each field in settings and other Tips and Tricks. 43 | - See the Troubleshooting doc which shows how to ask for help and goes through some common problems. 44 | -------------------------------------------------------------------------------- /Release Notes.md: -------------------------------------------------------------------------------- 1 | ![alt text](https://github.com/fnord12/script.pseudotv/blob/master/resources/images/Default.png?raw=true "PseudoTV Logo") 2 | 3 | PseudoTV Classic - fnord12 branch 4 | ====== 5 | 6 | This document briefly lists the new features in each release since i - fnord12 - forked PseudoTV from Steveb's branch. Please note that there are individual Release Notes for each release that discuss the features in much more detail. When a feature in an earlier release has been superceded by a feature in a later release, the earlier feature won't be listed. 7 | 8 | ### 5.0.0 9 | * Rewritten in Python 3 and made compatible with Kodi 21 Omega. 10 | * Updated file length checking - requires FFMPEG. 11 | * Reset Watch enabled by default / can now exclude channels from Reset 12 | * Settings for Channels configured in main settings area are now preserved when copying/swapping/inserting channels. 13 | * See the Release Notes 5.0.0 doc for more details! 14 | 15 | 16 | ### 4.5.4 17 | * Added 4:3 Channel Bug Positions. Thanks to XeXoasz! 18 | 19 | ### 4.5.3 20 | * Press Page Up or Page Down to navigate the EPG. Thanks to jlippold! 21 | 22 | ### 4.5.2 23 | * Color options in EPG 24 | * Ability to choose between 3, 6, or 9 rows in the EPG 25 | * Ability to specify that a channel always choose a certain language track 26 | * Workaround for when PSTV can't create a watermark 27 | * Better UI for Don't Include A Show and Channel Logo advanced rules 28 | 29 | ### 4.5.1 30 | * Fix for Reset Problem for Realtime mode 31 | * Configure plots for Directory episodes 32 | * Fix for Interleaved Channels starting episode 33 | * Fix for a case where PSTV was skipping videos 34 | * Lots of new options for EPG configurability: 35 | * --Show Episode Title instead of Show Title (with options) 36 | * --Hide Title for Directory channels 37 | * --Option to display nothing in EPG for small blocks 38 | * --Option to show a single long block instead of individual blocks (e.g. to just have your music video channels say "MTV") 39 | 40 | ### 4.5.0 41 | * Start Channel 42 | * New channel changing method 43 | * Jump to previous channel 44 | * Improvements to Reset Watch performance 45 | * Artist/Band listed for music videos 46 | * Brightness and color options for channel logo watermark 47 | * Options for hiding Coming Up Next 48 | * Option to hide leading zeroes for channels 49 | * Performance tweaks: max channels, Delay Before and After Changing Channel 50 | * Handling for videos that PSTV would have otherwised skipped 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /Troubleshooting.md: -------------------------------------------------------------------------------- 1 | ![alt text](https://github.com/fnord12/script.pseudotv/blob/master/resources/images/Default.png?raw=true "PseudoTV Logo") 2 | 3 | Troubleshooting 4 | ====== 5 | Please always report your OS, your Kodi version, and confirm that you're on my latest version if you're having a problem. 6 | 7 | WHEN REPORTING A PROBLEM, I NEED A DEBUG LOG PASTED TO https://paste.kodi.tv/ 8 | 9 | For details, see https://kodi.wiki/view/Log_file 10 | 11 | Without that log information we're going to have a lot of back and forth and I won't be able to help, so please follow the instructions at the above link (except paste the link on my github, not the forum). 12 | 13 | 14 | ## Clean install 15 | 16 | Before asking for my help, especially if you are having an issue that no one else seems to be having, you may just want to completely remove PSTV and do a clean install. 17 | 18 | First thing to do is to make sure your PSTV settings are backed up. You can back up your settings by making a copy of \userdata\addon_data\script.pseudotv. To find your userdata folder, see here: 19 | 20 | https://kodi.wiki/view/Userdata#Location_of_the_userdata_folder 21 | 22 | You can copy the entire script.pseudotv folder and put it somewhere safe. 23 | 24 | After you've done that, uninstall PSTV via the Kodi addons menu. Then close Kodi see if you can verify that the pstv folder has been removed from the Addons folder. Addons is a peer of Userdata, so should be able to find it by going to the parent folder of Userdata (i'm not sure if this is true in every OS, though). Look for a folder again called "script.pseudotv". It shouldn't still be there, but if it is, delete it. 25 | 26 | Then install my latest version of PSTV. If everything is now working but you've lost your channel setup, restore your userdata. MAKE SURE TO PUT IT BACK IN \userdata\addon_data NOT \addons! 27 | 28 | ## Some Common Issues 29 | If PSTV is not finding videos, confirm that you have FFMPEG installed and/or try setting default video lengths in the Settings>Performance section. 30 | 31 | If a custom playlist for TV shows is not playing/populating, make sure it is of Type = Episodes, not Type = TVShow 32 | 33 | Generally: 34 | The best thing to do is enable debugging, start PseudoTV, and then stop it, turn off debugging and open the Kodi log. If you search for the word Exception you should find any current errors and a lot of the time it will tell give you a hint. You can also search for "failed to find duration". The debugging for PseuoTV is pretty verbose so you should be able to trace through various problems. If all else fails post the log as described above so I can see what's going on. 35 | -------------------------------------------------------------------------------- /VideoParserFFProbe.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, struct 21 | import traceback 22 | 23 | from Globals import ascii 24 | from FileAccess import FileAccess 25 | 26 | import subprocess 27 | 28 | 29 | 30 | class VideoParserFFProbe: 31 | def log(self, msg, level = xbmc.LOGDEBUG): 32 | xbmc.log('script.pseudotv-VideoParserFFProbe: ' + ascii(msg), level) 33 | 34 | 35 | def determineLength(self, filename): 36 | if os.name == "nt": 37 | 38 | result = subprocess.run(["ffprobe", "-v", "quiet", "-show_entries", 39 | "format=duration", "-of", 40 | "default=noprint_wrappers=1:nokey=1", filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) 41 | 42 | else: 43 | 44 | result = subprocess.run(["ffprobe", "-v", "quiet", "-show_entries", 45 | "format=duration", "-of", 46 | "default=noprint_wrappers=1:nokey=1", filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 47 | 48 | tempDur = str(result.stdout) 49 | self.log ('result.stdout: ' + tempDur) 50 | 51 | 52 | if ('Header missing' in tempDur) or ('invalid' in tempDur) or ('Invalid' in tempDur): 53 | self.log ('Header missing') 54 | spiltDur = tempDur.split('\\',1) 55 | spiltDur = spiltDur[0].split('\'',1) 56 | durationfloat = float(spiltDur[1]) 57 | self.log ('durationfloat= ' + str(durationfloat)) 58 | else: 59 | try: 60 | durationfloat = float(result.stdout) 61 | except: 62 | self.log("Exception attempting to convert duration to float: " + filename + " " + str(result.stdout)) 63 | durationfloat = 0 64 | 65 | duration = int(durationfloat) 66 | 67 | self.log ('determined length for ' + filename + ' is: ' + str(duration)) 68 | 69 | return duration 70 | -------------------------------------------------------------------------------- /addon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | executable 9 | 10 | 11 | 12 | all 13 | Channel surfing for your video library 14 | Crie Canais de TV fictícios sua biblioteca de vídeo 15 | PseudoTV acts similar to normal broadcast or cable TV, complete with multiple preset and user-defined channels and an EPG. 16 | PseudoTV atua semelhante a um transmissão normal de TV a cabo, com pré-ajuste múltiplo e canais definidos pelo usuário. 17 | https://github.com/fnord12/script.pseudotv 18 | https://github.com/fnord12/script.pseudotv 19 | GNU GENERAL PUBLIC LICENSE Version 3 20 | n 21 | See Release Notes. 22 | 23 | 24 | icon.png 25 | fanart.jpg 26 | resources/screenshots/screenshot-01.png 27 | resources/screenshots/screenshot-02.png 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | 5.0.1 2 | OS differentiation for FFPROBE 3 | Logo capitalization - thanks bornagainpenguin 4 | Secondary Channel bug position 5 | Fix for channel reset 6 | 7 | 5.0.0 8 | Updated for Python 3 / Kodi 21 9 | Reset Watch defaulted / Added Exclude From Reset 10 | Copy/Swap support for channel toggles 11 | 12 | 4.5.4 (XeXoasz) 13 | Added 4:3 Channel Bug Positions. 14 | 15 | 4.5.3 (jlippold) 16 | Press Page Up or Page Down to navigate the EPG. 17 | 18 | 4.5.2 (fnord12) 19 | Color options in EPG 20 | Ability to choose between 3, 6, or 9 rows in the EPG 21 | Ability to specify that a channel always choose a certain language track 22 | Workaround for when PSTV can't create a watermark 23 | Better UI for Don't Include A Show and Channel Logo advanced rules 24 | 25 | 4.5.1 (fnord12) 26 | Fix for Reset Problem for Realtime mode 27 | Configure plots for Directory episodes 28 | Fix for Interleaved Channels starting episode 29 | Fix for a case where PSTV was skipping videos 30 | Lots of new options for EPG configurability: 31 | --Show Episode Title instead of Show Title (with options) 32 | --Hide Title for Directory channels 33 | --Option to display nothing in EPG for small blocks 34 | --Option to show a single long block instead of individual blocks (e.g. to just have your music video channels say "MTV") 35 | 36 | 4.5.0 (fnord12) 37 | Fully baked Reset Watched. 38 | Startup Channel. 39 | Additional new settings and performance tweaks. 40 | A large-ish update; see Release Notes for details. 41 | 42 | 3.0 (steveb & fnord12) 43 | Initial Reset Watched. 44 | Admin UI update. 45 | Several other smaller fixes and improvements. 46 | 2.4.5 (steveb) 47 | Hebrew translation. Thanks 'Eng2Heb' 48 | Added year for movie info. 49 | 50 | 2.4.4 (steveb) 51 | Added option to enable/disable channel logo's in the epg grid. 52 | New Default Skin (Estuary based). 53 | Added default font. 54 | 55 | 2.4.3 (steveb) 56 | Check for playing media. 57 | Improve timebar position. 58 | Code cleanup. 59 | Cleanup DialogProgress 60 | 61 | 2.4.2 (steveb) 62 | Jarvis code cleanup 63 | 64 | 2.4.1 (steveb) 65 | Added option to set seek times forward/backward (Isengard & above). 66 | Code cleanup. 67 | 68 | 2.4.0 (steveb) 69 | Helix support. 70 | 71 | 2.3.0 (steveb) 72 | Automatic conversion of colour channel logo's to grey-scale for channel bug. 73 | 74 | 2.2.0 (steveb) 75 | Gotham Support. 76 | Code Cleanup. 77 | Localize Strings. 78 | Changed max mu3 string length from 4096(512 bytes) to 16384(2048 bytes). 79 | 80 | 2.1.0 81 | New rule: reset every x days 82 | Update to Night skin (thanks Steveb). 83 | Better exception handling. 84 | Change 'short clip' length. 85 | Include IceLibrary streams. 86 | Configuration bug fixes. 87 | Addition of Metropolis skin (thanks Steveb). 88 | Updates to skins (thanks again Steveb). 89 | Fix for color truncation (thanks Josebiro). 90 | Fix for missing texture (thanks lambda81). 91 | Hide channel bug when changing channel. 92 | Properly detect already running. 93 | Option to include the season / episode in the show title. 94 | 95 | 2.0.0 96 | New advanced channel rule system. 97 | Share channels between multiple systems. 98 | Addition of Dutch language (thanks Machine-Sanctum). 99 | Support for MOV file parsing. 100 | Multiple thread deletion issues fixed. 101 | Background channel loading. 102 | EPG bugs fixed. 103 | Support for directory-type channels. 104 | Select mode for background channel thread. 105 | EPG drawing optimization. 106 | Select between 12-hour and 24-hour clock. 107 | Better channel creation for first-time users. 108 | Much better time accuracy between restarts. 109 | Added Xeebo skin (thanks Steveb). 110 | 111 | 1.2.1 112 | Now ask the user to enable the webserver if it isn't on. 113 | Fix to use the proper webserver port. 114 | Update to the Night skin (thanks Steveb). 115 | Added the Simplicity skin (thanks Zepfan). 116 | Several small performance improvements. 117 | Shift 30 seconds forward or backward by using the left and right arrow keys. 118 | Many random fixes. 119 | 120 | 1.2.0 121 | The user can now specify how channels start: resume, follow the EPG (real- 122 | time), or random. 123 | Background updating of channels. 124 | Fixed issues when used in Eden. 125 | No longer sometimes crashes on exit. 126 | Turns off repeat when exiting. 127 | Added Spanish translation (thanks CyberXaz). 128 | Updated the Night skin (thanks Steveb). 129 | 130 | 1.1.0 131 | Added the channel configuration utility. 132 | Fixed a potential crash in the mp4 parser. 133 | Separated the channel creation code into a different module. 134 | Changed a few of the configuration strings. 135 | Added the ability to refresh channels on every start. 136 | Improved the channel changing speed. 137 | Resume a channel at the proper time when switching between channels. 138 | Allow the user to specify a directory for channel logos. 139 | Allow the use of the OSD. 140 | Added an FLV parser. 141 | New skins from Zepfan. 142 | Fixed a problem with shows not being resumed properly from the EPG. 143 | Gave skinners the ability to change the EPG button text color. 144 | Updates to nearly all skins (thanks Zepfan and Sranshaft). 145 | 146 | 1.0.1 147 | Able to use the Previous Menu key to exit. 148 | Update to the Refocus skin from Sranshaft. 149 | 150 | 1.0.0 151 | Crazy jump in version to 1.0 because I can. 152 | Turn off shuffling if it's on. 153 | Playlist parsing is completely minidom now. 154 | Manually shuffle playlists when the order is random. 155 | Allow the stop button inside of the 2 second window. 156 | Added the Confluence skin (thanks Sranshaft). 157 | Added the Transparency skin (thanks Zepfan). 158 | Now have channel icons for most presets (thanks jtucker1972). 159 | Fixed an uncaught exception in video parsers. 160 | Works if onClick isn't called in the EPG. 161 | 162 | 0.2.0 163 | New default skin (thanks to Sranshaft) 164 | Added an info window (again, Sranshaft). 165 | There is now a PseudoTV icon (thanks bridgman). 166 | Channel icons. 167 | Control over button placement put into the skin. 168 | Start the script on the previously viewed channel. 169 | EPG speed improvement. 170 | Support mixed playlists. 171 | Support for future JSON modification. 172 | 173 | 0.1.5 174 | Resolved the problem with not resuming the channel properly. 175 | Fixed the issue introduced in 0.1.4 that prevending gathering information 176 | on Windows systems. 177 | Put several of the controls into the hands of the skinners. 178 | 179 | 0.1.4 180 | New method of scanning channels (thanks to TheOddLinguist) that correctly 181 | uses movie sets and TV show-type playlists. 182 | Display music video information in the EPG. 183 | 184 | 0.1.3 185 | There was an issue where XBMC woukd sometimes return a float when an int 186 | was expected, resulting in a type error and a freeze. 187 | Sometimes the EPG wouldn't properly select or display the correct show. 188 | The EPG would sometimes stop scrolling. 189 | Changed the EPG to left-shift the time offsets. 190 | 191 | 0.1.2 192 | Windows systems experienced freezes...but no more! 193 | There was also an issue getting the duration of an episode. 194 | 195 | 0.1.1 196 | Fixed a freeze when there are unexpected things in the smart playlist. 197 | 198 | 0.1.0 (Initial alpha version) 199 | -------------------------------------------------------------------------------- /default.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import xbmcgui 21 | import xbmcaddon 22 | import xbmcvfs 23 | import sys 24 | import os 25 | 26 | ADDON = xbmcaddon.Addon() 27 | ADDON_ID = ADDON.getAddonInfo('id') 28 | CWD = ADDON.getAddonInfo('path') 29 | RESOURCE = xbmcvfs.translatePath(os.path.join(CWD, 'resources', 'lib').encode("utf-8")) 30 | 31 | sys.path.append(RESOURCE) 32 | 33 | SkinID = xbmc.getSkinDir() 34 | if SkinID != 'skin.estuary': 35 | import MyFont 36 | if MyFont.getSkinRes() == '1080i': 37 | MyFont.addFont("PseudoTv10", "NotoSans-Regular.ttf", "23") 38 | MyFont.addFont("PseudoTv12", "NotoSans-Regular.ttf", "25") 39 | MyFont.addFont("PseudoTv13", "NotoSans-Regular.ttf", "30") 40 | MyFont.addFont("PseudoTv14", "NotoSans-Regular.ttf", "32") 41 | else: 42 | MyFont.addFont("PseudoTv10", "NotoSans-Regular.ttf", "14") 43 | MyFont.addFont("PseudoTv12", "NotoSans-Regular.ttf", "16") 44 | MyFont.addFont("PseudoTv13", "NotoSans-Regular.ttf", "20") 45 | MyFont.addFont("PseudoTv14", "NotoSans-Regular.ttf", "22") 46 | 47 | def Start(): 48 | if xbmc.Player().isPlaying(): 49 | xbmc.Player().stop() 50 | import Overlay as Overlay 51 | MyOverlayWindow = Overlay.TVOverlay("script.pseudotv.TVOverlay.xml", CWD, "default") 52 | del MyOverlayWindow 53 | xbmcgui.Window(10000).setProperty("PseudoTVRunning", '') 54 | 55 | if xbmcgui.Window(10000).getProperty("PseudoTVRunning") != "True": 56 | xbmcgui.Window(10000).setProperty("PseudoTVRunning", "True") 57 | shouldrestart = False 58 | if shouldrestart == False: 59 | Start() 60 | else: 61 | xbmc.log('script.PseudoTV - Already running, exiting', xbmc.LOGERROR) 62 | -------------------------------------------------------------------------------- /fanart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/fanart.jpg -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/icon.png -------------------------------------------------------------------------------- /resources/fonts/NotoSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/fonts/NotoSans-Regular.ttf -------------------------------------------------------------------------------- /resources/images/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/Default.png -------------------------------------------------------------------------------- /resources/images/Default2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/Default2.png -------------------------------------------------------------------------------- /resources/images/label_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_0.png -------------------------------------------------------------------------------- /resources/images/label_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_1.png -------------------------------------------------------------------------------- /resources/images/label_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_2.png -------------------------------------------------------------------------------- /resources/images/label_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_3.png -------------------------------------------------------------------------------- /resources/images/label_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_4.png -------------------------------------------------------------------------------- /resources/images/label_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_5.png -------------------------------------------------------------------------------- /resources/images/label_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_6.png -------------------------------------------------------------------------------- /resources/images/label_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_7.png -------------------------------------------------------------------------------- /resources/images/label_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_8.png -------------------------------------------------------------------------------- /resources/images/label_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/images/label_9.png -------------------------------------------------------------------------------- /resources/lib/Channel.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | from Playlist import Playlist 20 | from Globals import * 21 | from Rules import * 22 | 23 | 24 | 25 | class Channel: 26 | def __init__(self): 27 | self.Playlist = Playlist() 28 | self.name = '' 29 | self.playlistPosition = 0 30 | self.showTimeOffset = 0 31 | self.lastAccessTime = 0 32 | self.totalTimePlayed = 0 33 | self.fileName = '' 34 | self.isPaused = False 35 | self.isValid = False 36 | self.isRandom = False 37 | self.mode = 0 38 | self.ruleList = [] 39 | self.channelNumber = 0 40 | self.isSetup = False 41 | 42 | 43 | def log(self, msg, level = xbmc.LOGDEBUG): 44 | log('Channel: ' + msg, level) 45 | 46 | 47 | def setPlaylist(self, filename): 48 | return self.Playlist.load(filename) 49 | 50 | 51 | def loadRules(self, channel): 52 | del self.ruleList[:] 53 | listrules = RulesList() 54 | self.channelNumber = channel 55 | 56 | try: 57 | rulecount = int(ADDON_SETTINGS.getSetting('Channel_' + str(channel) + '_rulecount')) 58 | 59 | for i in range(rulecount): 60 | ruleid = int(ADDON_SETTINGS.getSetting('Channel_' + str(channel) + '_rule_' + str(i + 1) + '_id')) 61 | 62 | for rule in listrules.ruleList: 63 | if rule.getId() == ruleid: 64 | self.ruleList.append(rule.copy()) 65 | 66 | for x in range(rule.getOptionCount()): 67 | self.ruleList[-1].optionValues[x] = ADDON_SETTINGS.getSetting('Channel_' + str(channel) + '_rule_' + str(i + 1) + '_opt_' + str(x + 1)) 68 | 69 | self.log("Added rule - " + self.ruleList[-1].getTitle()) 70 | break 71 | except: 72 | self.ruleList = [] 73 | 74 | 75 | def setPaused(self, paused): 76 | self.isPaused = paused 77 | 78 | 79 | def setShowTime(self, thetime): 80 | self.showTimeOffset = thetime // 1 81 | 82 | 83 | def setShowPosition(self, show): 84 | show = int(show) 85 | self.playlistPosition = self.fixPlaylistIndex(show) 86 | 87 | 88 | def setAccessTime(self, thetime): 89 | self.lastAccessTime = thetime // 1 90 | 91 | 92 | def getCurrentDuration(self): 93 | return self.getItemDuration(self.playlistPosition) 94 | 95 | 96 | def getItemDuration(self, index): 97 | return self.Playlist.getduration(self.fixPlaylistIndex(index)) 98 | 99 | 100 | def getTotalDuration(self): 101 | return self.Playlist.totalDuration 102 | 103 | 104 | def getCurrentDescription(self): 105 | return self.getItemDescription(self.playlistPosition) 106 | 107 | 108 | def getItemDescription(self, index): 109 | return self.Playlist.getdescription(self.fixPlaylistIndex(index)) 110 | 111 | 112 | def getCurrentEpisodeTitle(self): 113 | return self.getItemEpisodeTitle(self.playlistPosition) 114 | 115 | def getItemPlaycount(self, index): 116 | return self.Playlist.getplaycount(self.fixPlaylistIndex(index)) 117 | 118 | 119 | def getItemEpisodeTitle(self, index): 120 | return self.Playlist.getepisodetitle(self.fixPlaylistIndex(index)) 121 | 122 | 123 | def getCurrentTitle(self): 124 | return self.getItemTitle(self.playlistPosition) 125 | 126 | 127 | def getItemTitle(self, index): 128 | return self.Playlist.getTitle(self.fixPlaylistIndex(index)) 129 | 130 | 131 | def getCurrentFilename(self): 132 | return self.getItemFilename(self.playlistPosition) 133 | 134 | 135 | def getItemFilename(self, index): 136 | return self.Playlist.getfilename(self.fixPlaylistIndex(index)) 137 | 138 | 139 | def fixPlaylistIndex(self, index): 140 | if self.Playlist.size() == 0: 141 | return index 142 | 143 | while index >= self.Playlist.size(): 144 | index -= self.Playlist.size() 145 | 146 | while index < 0: 147 | index += self.Playlist.size() 148 | 149 | return index 150 | 151 | 152 | def addShowPosition(self, addition): 153 | self.setShowPosition(self.playlistPosition + addition) 154 | -------------------------------------------------------------------------------- /resources/lib/FLVParser.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, struct 21 | 22 | from Globals import ascii 23 | from FileAccess import FileAccess 24 | 25 | 26 | 27 | class FLVTagHeader: 28 | def __init__(self): 29 | self.tagtype = 0 30 | self.datasize = 0 31 | self.timestamp = 0 32 | self.timestampext = 0 33 | 34 | 35 | def readHeader(self, thefile): 36 | try: 37 | data = struct.unpack('B', thefile.read(1))[0] 38 | self.tagtype = (data & 0x1F) 39 | self.datasize = struct.unpack('>H', thefile.read(2))[0] 40 | data = struct.unpack('>B', thefile.read(1))[0] 41 | self.datasize = (self.datasize << 8) | data 42 | self.timestamp = struct.unpack('>H', thefile.read(2))[0] 43 | data = struct.unpack('>B', thefile.read(1))[0] 44 | self.timestamp = (self.timestamp << 8) | data 45 | self.timestampext = struct.unpack('>B', thefile.read(1))[0] 46 | except: 47 | self.tagtype = 0 48 | self.datasize = 0 49 | self.timestamp = 0 50 | self.timestampext = 0 51 | 52 | 53 | 54 | class FLVParser: 55 | def log(self, msg, level = xbmc.LOGDEBUG): 56 | xbmc.log('FLVParser: ' + ascii(msg), level) 57 | 58 | 59 | def determineLength(self, filename): 60 | self.log("determineLength " + filename) 61 | 62 | try: 63 | self.File = FileAccess.open(filename, "rb", None) 64 | except: 65 | self.log("Unable to open the file") 66 | return 67 | 68 | if self.verifyFLV() == False: 69 | self.log("Not a valid FLV") 70 | self.File.close() 71 | return 0 72 | 73 | tagheader = self.findLastVideoTag() 74 | 75 | if tagheader is None: 76 | self.log("Unable to find a video tag") 77 | self.File.close() 78 | return 0 79 | 80 | dur = self.getDurFromTag(tagheader) 81 | self.File.close() 82 | self.log("Duration: " + str(dur)) 83 | return dur 84 | 85 | 86 | def verifyFLV(self): 87 | data = self.File.read(3) 88 | 89 | if data != 'FLV': 90 | return False 91 | 92 | return True 93 | 94 | 95 | 96 | def findLastVideoTag(self): 97 | try: 98 | self.File.seek(0, 2) 99 | curloc = self.File.tell() 100 | except: 101 | self.log("Exception seeking in findLastVideoTag") 102 | return None 103 | 104 | # Go through a limited amount of the file before quiting 105 | maximum = curloc - (2 * 1024 * 1024) 106 | 107 | if maximum < 0: 108 | maximum = 8 109 | 110 | while curloc > maximum: 111 | try: 112 | self.File.seek(-4, 1) 113 | data = int(struct.unpack('>I', self.File.read(4))[0]) 114 | 115 | if data < 1: 116 | self.log('Invalid packet data') 117 | return None 118 | 119 | if curloc - data <= 0: 120 | self.log('No video packet found') 121 | return None 122 | 123 | self.File.seek(-4 - data, 1) 124 | curloc = curloc - data 125 | tag = FLVTagHeader() 126 | tag.readHeader(self.File) 127 | 128 | if tag.datasize <= 0: 129 | self.log('Invalid packet header') 130 | return None 131 | 132 | if curloc - 8 <= 0: 133 | self.log('No video packet found') 134 | return None 135 | 136 | self.File.seek(-8, 1) 137 | self.log("detected tag type " + str(tag.tagtype)) 138 | curloc = self.File.tell() 139 | 140 | if tag.tagtype == 9: 141 | return tag 142 | except: 143 | self.log('Exception in findLastVideoTag') 144 | return None 145 | 146 | return None 147 | 148 | 149 | def getDurFromTag(self, tag): 150 | tottime = tag.timestamp | (tag.timestampext << 24) 151 | tottime = int(tottime / 1000) 152 | return tottime 153 | -------------------------------------------------------------------------------- /resources/lib/Globals.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import os 20 | import xbmcaddon, xbmc, xbmcgui, xbmcvfs 21 | import Settings 22 | 23 | from FileAccess import FileLock 24 | 25 | def debug(msg, *args): 26 | try: 27 | txt=u'' 28 | msg=unicode(msg) 29 | for arg in args: 30 | if type(arg) == int: 31 | arg = unicode(arg) 32 | if type(arg) == list: 33 | arg = unicode(arg) 34 | txt = txt + u"/" + arg 35 | if txt == u'': 36 | xbmc.log(u"PSTV: {0}".format(msg).encode('ascii','xmlcharrefreplace'), xbmc.LOGDEBUG) 37 | else: 38 | xbmc.log(u"PSTV: {0}#{1}#".format(msg, txt).encode('ascii','xmlcharrefreplace'), xbmc.LOGDEBUG) 39 | except: 40 | print("PSTV: Error in Debugoutput") 41 | print(msg) 42 | print(args) 43 | 44 | ADDON = xbmcaddon.Addon(id='script.pseudotv') 45 | ADDON_ID = ADDON.getAddonInfo('id') 46 | ADDON_NAME = ADDON.getAddonInfo('name') 47 | LANGUAGE = ADDON.getLocalizedString 48 | CWD = ADDON.getAddonInfo('path') 49 | VERSION = ADDON.getAddonInfo('version') 50 | ICON = ADDON.getAddonInfo('icon') 51 | 52 | def log(msg, level = xbmc.LOGDEBUG): 53 | try: 54 | xbmc.log(ADDON_ID + '-' + ascii(msg), level) 55 | except: 56 | pass 57 | 58 | 59 | def uni(string): 60 | #not needed in Python 3 but keeping it 'just in case...' 61 | 62 | #string = string.encode('utf-8', 'ignore') 63 | 64 | #if isinstance(string, str): 65 | # if not isinstance(string, unicode): 66 | # string = unicode(string, encoding) 67 | 68 | return string 69 | 70 | def ascii(string): 71 | #not needed in Python 3 but keeping it 'just in case...' 72 | 73 | #string = string.encode('ascii', 'ignore') 74 | 75 | #if isinstance(string, str): 76 | # if isinstance(string, unicode): 77 | # string = string.encode('ascii', 'ignore') 78 | 79 | return string 80 | 81 | 82 | TIMEOUT = 15 * 1000 83 | PREP_CHANNEL_TIME = 60 * 60 * 24 * 5 84 | NOTIFICATION_CHECK_TIME = 5 85 | NOTIFICATION_TIME_BEFORE_END = 90 86 | NOTIFICATION_DISPLAY_TIME = 8 87 | 88 | MODE_RESUME = 1 89 | MODE_ALWAYSPAUSE = 2 90 | MODE_ORDERAIRDATE = 4 91 | MODE_RANDOM = 8 92 | MODE_REALTIME = 16 93 | MODE_STARTMODES = MODE_RANDOM | MODE_REALTIME | MODE_RESUME 94 | 95 | SETTINGS_LOC = ADDON.getAddonInfo('profile') 96 | CHANNEL_SHARING = False 97 | LOCK_LOC = xbmcvfs.translatePath(os.path.join(SETTINGS_LOC, 'cache' + '/')) 98 | 99 | if ADDON.getSetting('ChannelSharing') == "true": 100 | CHANNEL_SHARING = True 101 | LOCK_LOC = xbmcvfs.translatePath(os.path.join(ADDON.getSetting('SettingsFolder'), 'cache' + '/')) 102 | 103 | IMAGES_LOC = xbmcvfs.translatePath(os.path.join(CWD, 'resources', 'images' + '/')) 104 | LOGOS_LOC = xbmcvfs.translatePath(os.path.join(CWD, 'resources', 'logos' + '/')) 105 | CHANNELS_LOC = os.path.join(SETTINGS_LOC, 'cache' + '/') 106 | GEN_CHAN_LOC = os.path.join(CHANNELS_LOC, 'generated' + '/') 107 | MADE_CHAN_LOC = os.path.join(CHANNELS_LOC, 'stored' + '/') 108 | CHANNELBUG_LOC = xbmcvfs.translatePath(os.path.join(CHANNELS_LOC, 'ChannelBug' + '/')) 109 | 110 | CHANNELBUG_POS = [[19,19], [1695,19], [1695,952], [19,952], [250,19], [1483,19], [1483,952], [250,952]] 111 | 112 | SHORT_CLIP_ENUM = [15, 30, 60, 90, 120, 180, 240, 300, 360] 113 | INFO_DUR = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 114 | SEEK_FORWARD = [10, 30, 60, 180, 300, 600, 1800] 115 | SEEK_BACKWARD = [-10, -30, -60, -180, -300, -600, -1800] 116 | MEDIA_LIMIT = [10, 25, 50, 100, 250, 500, 1000, 0] 117 | CHANNEL_DELAY = [25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000] 118 | HOLD_ACTIONS = [.25, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4] 119 | ASSIGNED_DURATION = [1, 5, 10, 15, 30, 45, 60, 90, 120] 120 | DIR_ASSIGNED_DURATION = [1, 5, 10, 15, 30, 45, 60, 90, 120] 121 | BUG_BRIGHTNESS = [.25, .5, .75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0] 122 | 123 | 124 | NUM_COLOUR = ['0xFFFF0000', '0xFF00FF00', '0xFF0000FF', '0xFFFFFF00', '0xFF00FFFF', '0xFFFFA500', '0xFFFF00FF', '0xFF808080', '0xFFFFFFFF'] 125 | 126 | GlobalFileLock = FileLock() 127 | ADDON_SETTINGS = Settings.Settings() 128 | 129 | TIME_BAR = 'pstvTimeBar.png' 130 | BUTTON_NO_FOCUS = 'pstvButtonNoFocus.png' 131 | BUTTON_FOCUS = 'pstvButtonFocus.png' 132 | BUTTON_NO_FOCUS_SHORT = 'pstvButtonNoFocusShort.png' 133 | BUTTON_FOCUS_SHORT = 'pstvButtonFocusShort.png' 134 | BUTTON_NO_FOCUS_ALT1 = 'pstvButtonNoFocusAlt1.png' 135 | BUTTON_NO_FOCUS_ALT2 = 'pstvButtonNoFocusAlt2.png' 136 | BUTTON_NO_FOCUS_ALT3 = 'pstvButtonNoFocusAlt3.png' 137 | BUTTON_NO_FOCUS_ALT1_SHORT = 'pstvButtonNoFocusAlt1Short.png' 138 | BUTTON_NO_FOCUS_ALT2_SHORT = 'pstvButtonNoFocusAlt2Short.png' 139 | BUTTON_NO_FOCUS_ALT3_SHORT = 'pstvButtonNoFocusAlt3Short.png' 140 | 141 | RULES_ACTION_START = 1 142 | RULES_ACTION_JSON = 2 143 | RULES_ACTION_LIST = 4 144 | RULES_ACTION_BEFORE_CLEAR = 8 145 | RULES_ACTION_BEFORE_TIME = 16 146 | RULES_ACTION_FINAL_MADE = 32 147 | RULES_ACTION_FINAL_LOADED = 64 148 | RULES_ACTION_OVERLAY_SET_CHANNEL = 128 149 | RULES_ACTION_OVERLAY_SET_CHANNEL_END = 256 150 | 151 | # Maximum is 10 for this 152 | RULES_PER_PAGE = 7 153 | 154 | ACTION_MOVE_LEFT = 1 155 | ACTION_MOVE_RIGHT = 2 156 | ACTION_MOVE_UP = 3 157 | ACTION_MOVE_DOWN = 4 158 | ACTION_PAGEUP = 5 159 | ACTION_PAGEDOWN = 6 160 | ACTION_SELECT_ITEM = 7 161 | ACTION_SELECT_ITEM2 = 100 #Mouse Left Click 162 | ACTION_MOUSE_RIGHT_CLICK = 101 #Mouse Right Click 163 | ACTION_MOUSE_MOVE = 107 164 | ACTION_PREVIOUS_MENU = (9, 10, 92, 216, 247, 257, 275, 61467, 61448,) 165 | ACTION_SHOW_INFO = 11 166 | ACTION_STOP = 13 167 | ACTION_OSD = 117 168 | ACTION_NUMBER_0 = 58 169 | ACTION_NUMBER_9 = 67 170 | ACTION_INVALID = 999 171 | CONTEXT_MENU = 117 172 | ACTION_NEXT_PICTURE = 28 173 | ACTION_PREV_PICTURE = 29 174 | 175 | EPG_ROWCOUNT = [3, 6, 9] 176 | ROWCOUNT = EPG_ROWCOUNT[int(ADDON.getSetting("EPGRowcount"))] 177 | -------------------------------------------------------------------------------- /resources/lib/MKVParser.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, struct 21 | import traceback 22 | 23 | from Globals import ascii 24 | from FileAccess import FileAccess 25 | 26 | 27 | 28 | class MKVParser: 29 | def log(self, msg, level = xbmc.LOGDEBUG): 30 | xbmc.log('script.pseudotv-MKVParser: ' + ascii(msg), level) 31 | 32 | 33 | def determineLength(self, filename): 34 | self.log("determineLength " + filename) 35 | 36 | try: 37 | self.File = FileAccess.open(filename, "rb", None) 38 | except: 39 | self.log("Unable to open the file") 40 | self.log(traceback.format_exc(), xbmc.LOGERROR) 41 | return 42 | 43 | size = self.findHeader() 44 | 45 | if size == 0: 46 | self.log('Unable to find the segment info') 47 | dur = 0 48 | else: 49 | dur = self.parseHeader(size) 50 | 51 | self.log("Duration is " + str(dur)) 52 | return dur 53 | 54 | 55 | def parseHeader(self, size): 56 | duration = 0 57 | timecode = 0 58 | fileend = self.File.tell() + size 59 | datasize = 1 60 | data = 1 61 | 62 | while self.File.tell() < fileend and datasize > 0 and data > 0: 63 | data = self.getEBMLId() 64 | datasize = self.getDataSize() 65 | 66 | if data == 0x2ad7b1: 67 | timecode = 0 68 | 69 | try: 70 | for x in range(datasize): 71 | timecode = (timecode << 8) + struct.unpack('B', self.getData(1))[0] 72 | except: 73 | timecode = 0 74 | 75 | if duration != 0 and timecode != 0: 76 | break 77 | elif data == 0x4489: 78 | try: 79 | if datasize == 4: 80 | duration = int(struct.unpack('>f', self.getData(datasize))[0]) 81 | else: 82 | duration = int(struct.unpack('>d', self.getData(datasize))[0]) 83 | except: 84 | self.log("Error getting duration in header, size is " + str(datasize)) 85 | duration = 0 86 | 87 | if timecode != 0 and duration != 0: 88 | break 89 | else: 90 | try: 91 | self.File.seek(datasize, 1) 92 | except: 93 | self.log('Error while seeking') 94 | return 0 95 | 96 | if duration > 0 and timecode > 0: 97 | dur = (duration * timecode) / 1000000000 98 | return dur 99 | 100 | return 0 101 | 102 | 103 | def findHeader(self): 104 | self.log("findHeader") 105 | filesize = self.getFileSize() 106 | 107 | if filesize == 0: 108 | self.log("Empty file") 109 | return 0 110 | 111 | data = self.getEBMLId() 112 | 113 | # Check for 1A 45 DF A3 114 | if data != 0x1A45DFA3: 115 | self.log("Not a proper MKV") 116 | return 0 117 | 118 | datasize = self.getDataSize() 119 | 120 | try: 121 | self.File.seek(datasize, 1) 122 | except: 123 | self.log('Error while seeking') 124 | return 0 125 | 126 | data = self.getEBMLId() 127 | 128 | # Look for the segment header 129 | while data != 0x18538067 and self.File.tell() < filesize and data > 0 and datasize > 0: 130 | datasize = self.getDataSize() 131 | 132 | try: 133 | self.File.seek(datasize, 1) 134 | except: 135 | self.log('Error while seeking') 136 | return 0 137 | 138 | data = self.getEBMLId() 139 | 140 | datasize = self.getDataSize() 141 | data = self.getEBMLId() 142 | 143 | # Find segment info 144 | while data != 0x1549A966 and self.File.tell() < filesize and data > 0 and datasize > 0: 145 | datasize = self.getDataSize() 146 | 147 | try: 148 | self.File.seek(datasize, 1) 149 | except: 150 | self.log('Error while seeking') 151 | return 0 152 | 153 | data = self.getEBMLId() 154 | 155 | datasize = self.getDataSize() 156 | 157 | if self.File.tell() < filesize: 158 | return datasize 159 | 160 | return 0 161 | 162 | 163 | def getFileSize(self): 164 | size = 0 165 | 166 | try: 167 | pos = self.File.tell() 168 | self.File.seek(0, 2) 169 | size = self.File.tell() 170 | self.File.seek(pos, 0) 171 | except: 172 | pass 173 | 174 | return size 175 | 176 | 177 | def getData(self, datasize): 178 | data = self.File.read(datasize) 179 | return data 180 | 181 | 182 | def getDataSize(self): 183 | data = self.File.read(1) 184 | 185 | try: 186 | firstbyte = struct.unpack('>B', data)[0] 187 | datasize = firstbyte 188 | mask = 0xFFFF 189 | 190 | for i in range(8): 191 | if datasize >> (7 - i) == 1: 192 | mask = mask ^ (1 << (7 - i)) 193 | break 194 | 195 | datasize = datasize & mask 196 | 197 | if firstbyte >> 7 != 1: 198 | for i in range(1, 8): 199 | datasize = (datasize << 8) + struct.unpack('>B', self.File.read(1))[0] 200 | 201 | if firstbyte >> (7 - i) == 1: 202 | break 203 | except: 204 | datasize = 0 205 | 206 | return datasize 207 | 208 | 209 | def getEBMLId(self): 210 | data = self.File.read(1) 211 | 212 | try: 213 | firstbyte = struct.unpack('>B', data)[0] 214 | ID = firstbyte 215 | 216 | if firstbyte >> 7 != 1: 217 | for i in range(1, 4): 218 | ID = (ID << 8) + struct.unpack('>B', self.File.read(1))[0] 219 | 220 | if firstbyte >> (7 - i) == 1: 221 | break 222 | except: 223 | ID = 0 224 | 225 | return ID 226 | -------------------------------------------------------------------------------- /resources/lib/MP4Parser.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, struct 21 | 22 | from Globals import ascii 23 | from FileAccess import FileAccess 24 | 25 | 26 | class MP4DataBlock: 27 | def __init__(self): 28 | self.size = -1 29 | self.boxtype = '' 30 | self.data = '' 31 | 32 | 33 | 34 | class MP4MovieHeader: 35 | def __init__(self): 36 | self.version = 0 37 | self.flags = 0 38 | self.created = 0 39 | self.modified = 0 40 | self.scale = 0 41 | self.duration = 0 42 | 43 | 44 | 45 | class MP4Parser: 46 | def __init__(self): 47 | self.MovieHeader = MP4MovieHeader() 48 | 49 | 50 | def log(self, msg, level = xbmc.LOGDEBUG): 51 | xbmc.log('MP4Parser: ' + ascii(msg), level) 52 | 53 | 54 | def determineLength(self, filename): 55 | self.log("determineLength " + filename) 56 | 57 | try: 58 | self.File = FileAccess.open(filename, "rb", None) 59 | except: 60 | self.log("Unable to open the file") 61 | return 62 | 63 | dur = self.readHeader() 64 | self.File.close() 65 | self.log("Duration: " + str(dur)) 66 | return dur 67 | 68 | 69 | def readHeader(self): 70 | data = self.readBlock() 71 | 72 | if data.boxtype != 'ftyp': 73 | self.log("No file block") 74 | return 0 75 | 76 | # Skip past the file header 77 | try: 78 | self.File.seek(data.size, 1) 79 | except: 80 | self.log('Error while seeking') 81 | return 0 82 | 83 | data = self.readBlock() 84 | 85 | while data.boxtype != 'moov' and data.size > 0: 86 | try: 87 | self.File.seek(data.size, 1) 88 | except: 89 | self.log('Error while seeking') 90 | return 0 91 | 92 | data = self.readBlock() 93 | 94 | data = self.readBlock() 95 | 96 | while data.boxtype != 'mvhd' and data.size > 0: 97 | try: 98 | self.File.seek(data.size, 1) 99 | except: 100 | self.log('Error while seeking') 101 | return 0 102 | 103 | data = self.readBlock() 104 | 105 | self.readMovieHeader() 106 | 107 | if self.MovieHeader.scale > 0 and self.MovieHeader.duration > 0: 108 | return int(self.MovieHeader.duration / self.MovieHeader.scale) 109 | 110 | return 0 111 | 112 | 113 | def readMovieHeader(self): 114 | try: 115 | self.MovieHeader.version = struct.unpack('>b', self.File.read(1))[0] 116 | self.File.read(3) #skip flags for now 117 | 118 | if self.MovieHeader.version == 1: 119 | data = struct.unpack('>QQIQQ', self.File.read(36)) 120 | else: 121 | data = struct.unpack('>IIIII', self.File.read(20)) 122 | 123 | self.MovieHeader.created = data[0] 124 | self.MovieHeader.modified = data[1] 125 | self.MovieHeader.scale = data[2] 126 | self.MovieHeader.duration = data[3] 127 | except: 128 | self.MovieHeader.duration = 0 129 | 130 | 131 | def readBlock(self): 132 | box = MP4DataBlock() 133 | 134 | try: 135 | data = self.File.read(4) 136 | box.size = struct.unpack('>I', data)[0] 137 | box.boxtype = self.File.read(4) 138 | 139 | if box.size == 1: 140 | box.size = struct.unpack('>q', self.File.read(8))[0] 141 | box.size -= 8 142 | 143 | box.size -= 8 144 | 145 | if box.boxtype == 'uuid': 146 | box.boxtype = self.File.read(16) 147 | box.size -= 16 148 | except: 149 | pass 150 | 151 | return box 152 | -------------------------------------------------------------------------------- /resources/lib/Migrate.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import os 20 | import xbmcaddon, xbmc, xbmcgui 21 | import Settings 22 | import Globals 23 | import ChannelList 24 | 25 | 26 | 27 | class Migrate: 28 | def log(self, msg, level = xbmc.LOGDEBUG): 29 | Globals.log('Migrate: ' + msg, level) 30 | 31 | 32 | def migrate(self): 33 | self.log("migration") 34 | curver = "0.0.0" 35 | 36 | try: 37 | curver = Globals.ADDON_SETTINGS.getSetting("Version") 38 | 39 | if len(curver) == 0: 40 | curver = "0.0.0" 41 | except: 42 | curver = "0.0.0" 43 | 44 | if curver == Globals.VERSION: 45 | return True 46 | 47 | Globals.ADDON_SETTINGS.setSetting("Version", Globals.VERSION) 48 | self.log("version is " + curver) 49 | 50 | if curver == "0.0.0": 51 | if self.initializeChannels(): 52 | return True 53 | 54 | return True 55 | 56 | 57 | def initializeChannels(self): 58 | chanlist = ChannelList.ChannelList() 59 | chanlist.background = True 60 | chanlist.fillTVInfo(True) 61 | chanlist.fillMovieInfo(True) 62 | # Now create TV networks, followed by mixed genres, followed by TV genres, and finally movie genres 63 | currentchan = 1 64 | mixedlist = [] 65 | 66 | for item in chanlist.showGenreList: 67 | curitem = item[0].lower() 68 | 69 | for a in chanlist.movieGenreList: 70 | if curitem == a[0].lower(): 71 | mixedlist.append([item[0], item[1], a[1]]) 72 | break 73 | 74 | mixedlist.sort(key=lambda x: x[1] + x[2], reverse=True) 75 | currentchan = self.initialAddChannels(chanlist.networkList, 1, currentchan) 76 | 77 | # Mixed genres 78 | if len(mixedlist) > 0: 79 | added = 0.0 80 | 81 | for item in mixedlist: 82 | if item[1] > 2 and item[2] > 1: 83 | Globals.ADDON_SETTINGS.setSetting("Channel_" + str(currentchan) + "_type", "5") 84 | Globals.ADDON_SETTINGS.setSetting("Channel_" + str(currentchan) + "_1", item[0]) 85 | added += 1.0 86 | currentchan += 1 87 | itemlow = item[0].lower() 88 | 89 | # Remove that genre from the shows genre list 90 | for i in range(len(chanlist.showGenreList)): 91 | if itemlow == chanlist.showGenreList[i][0].lower(): 92 | chanlist.showGenreList.pop(i) 93 | break 94 | 95 | # Remove that genre from the movie genre list 96 | for i in range(len(chanlist.movieGenreList)): 97 | if itemlow == chanlist.movieGenreList[i][0].lower(): 98 | chanlist.movieGenreList.pop(i) 99 | break 100 | 101 | if added > 10: 102 | break 103 | 104 | currentchan = self.initialAddChannels(chanlist.showGenreList, 3, currentchan) 105 | currentchan = self.initialAddChannels(chanlist.movieGenreList, 4, currentchan) 106 | 107 | if currentchan > 1: 108 | return True 109 | 110 | return False 111 | 112 | 113 | def initialAddChannels(self, thelist, chantype, currentchan): 114 | if len(thelist) > 0: 115 | counted = 0 116 | lastitem = 0 117 | curchancount = 1 118 | lowerlimit = 1 119 | lowlimitcnt = 0 120 | 121 | for item in thelist: 122 | if item[1] > lowerlimit: 123 | if item[1] != lastitem: 124 | if curchancount + counted <= 10 or counted == 0: 125 | counted += curchancount 126 | curchancount = 1 127 | lastitem = item[1] 128 | else: 129 | break 130 | else: 131 | curchancount += 1 132 | 133 | lowlimitcnt += 1 134 | 135 | if lowlimitcnt == 3: 136 | lowlimitcnt = 0 137 | lowerlimit += 1 138 | else: 139 | break 140 | 141 | if counted > 0: 142 | for item in thelist: 143 | Globals.ADDON_SETTINGS.setSetting("Channel_" + str(currentchan) + "_type", str(chantype)) 144 | Globals.ADDON_SETTINGS.setSetting("Channel_" + str(currentchan) + "_1", item[0]) 145 | counted -= 1 146 | currentchan += 1 147 | 148 | if counted == 0: 149 | break 150 | 151 | return currentchan 152 | -------------------------------------------------------------------------------- /resources/lib/MyFont.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding: utf-8 3 | 4 | import os 5 | import xml.etree.ElementTree as ET 6 | import xbmc, xbmcaddon, xbmcvfs 7 | 8 | ADDON = xbmcaddon.Addon(id='script.pseudotv') 9 | SkinPath = xbmcvfs.translatePath('special://skin') 10 | ScriptPath = xbmcvfs.translatePath(ADDON.getAddonInfo('path')) 11 | SourceFontPath = os.path.join(ScriptPath, 'resources', 'fonts', 'NotoSans-Regular.ttf') 12 | ListDir = os.listdir(SkinPath) 13 | 14 | class PCParser(ET.XMLParser): 15 | def __init__(self): 16 | ET.XMLparser.__init__(self) 17 | self._parser.CommentHandler = self.handle_comment 18 | 19 | def handle_comment(self, data): 20 | self._target.start(ET.Comment, {}) 21 | self._target.data(data) 22 | self._target.end(ET.Comment) 23 | 24 | def getFontsXML(): 25 | fontxml_paths = [] 26 | try: 27 | for item in ListDir: 28 | item = os.path.join(SkinPath, item) 29 | if os.path.isdir(item): 30 | font_xml = os.path.join(item, "Font.xml") 31 | if os.path.exists(font_xml): 32 | fontxml_paths.append(font_xml) 33 | except: 34 | pass 35 | return fontxml_paths 36 | 37 | def isFontInstalled(fontxml_path, fontname): 38 | name = "%s" % fontname 39 | if not name in file(fontxml_path, "r").read(): 40 | return False 41 | else: 42 | return True 43 | 44 | def copyFont(SourceFontPath, SkinPath): 45 | dest = os.path.join(SkinPath, 'fonts', 'NotoSans-Regular.ttf') 46 | if os.path.exists(dest): 47 | return 48 | xbmcvfs.copy(SourceFontPath, dest) 49 | 50 | def getSkinRes(): 51 | SkinRes = '720p' 52 | SkinResPath = os.path.join(SkinPath, SkinRes) 53 | if not os.path.exists(SkinResPath): 54 | SkinRes = '1080i' 55 | return SkinRes 56 | 57 | def addFont(fontname, filename, size, style=""): 58 | try: 59 | reload_skin = False 60 | fontxml_paths = getFontsXML() 61 | if fontxml_paths: 62 | for fontxml_path in fontxml_paths: 63 | if not isFontInstalled(fontxml_path, fontname): 64 | parser = PCParser() 65 | tree = ET.parse(fontxml_path, parser=parser) 66 | root = tree.getroot() 67 | for sets in root.getchildren(): 68 | sets.findall("font")[-1].tail = "\n\t\t" 69 | new = ET.SubElement(sets, "font") 70 | new.text, new.tail = "\n\t\t\t", "\n\t" 71 | subnew1 = ET.SubElement(new, "name") 72 | subnew1.text = fontname 73 | subnew1.tail = "\n\t\t\t" 74 | subnew2 = ET.SubElement(new, "filename") 75 | subnew2.text = (filename, "Arial.ttf")[sets.attrib.get("id") == "Arial"] 76 | subnew2.tail = "\n\t\t\t" 77 | subnew3 = ET.SubElement(new, "size") 78 | subnew3.text = size 79 | subnew3.tail = "\n\t\t\t" 80 | last_elem = subnew3 81 | if style in ["normal", "bold", "italics", "bolditalics"]: 82 | subnew4 = ET.SubElement(new, "style") 83 | subnew4.text = style 84 | subnew4.tail = "\n\t\t\t" 85 | last_elem = subnew4 86 | reload_skin = True 87 | last_elem.tail = "\n\t\t" 88 | tree.write(fontxml_path) 89 | reload_skin = True 90 | except: 91 | pass 92 | 93 | if reload_skin: 94 | copyFont(SourceFontPath, SkinPath) 95 | xbmc.executebuiltin("XBMC.ReloadSkin()") 96 | return True 97 | 98 | return False 99 | -------------------------------------------------------------------------------- /resources/lib/Playlist.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmcgui, xbmc 20 | import threading 21 | import time 22 | import traceback 23 | 24 | from Globals import ascii, uni 25 | from FileAccess import FileAccess 26 | 27 | 28 | 29 | class PlaylistItem: 30 | def __init__(self): 31 | self.duration = 0 32 | self.filename = '' 33 | self.description = '' 34 | self.title = '' 35 | self.episodetitle = '' 36 | self.playcount = 0 37 | self.resume = 0 38 | 39 | 40 | 41 | class Playlist: 42 | def __init__(self): 43 | self.itemlist = [] 44 | self.totalDuration = 0 45 | self.processingSemaphore = threading.BoundedSemaphore() 46 | 47 | 48 | def getduration(self, index): 49 | self.processingSemaphore.acquire() 50 | 51 | if index >= 0 and index < len(self.itemlist): 52 | dur = self.itemlist[index].duration 53 | self.processingSemaphore.release() 54 | return dur 55 | 56 | self.processingSemaphore.release() 57 | return 0 58 | 59 | 60 | def size(self): 61 | self.processingSemaphore.acquire() 62 | totsize = len(self.itemlist) 63 | self.processingSemaphore.release() 64 | return totsize 65 | 66 | 67 | def getfilename(self, index): 68 | self.processingSemaphore.acquire() 69 | 70 | if index >= 0 and index < len(self.itemlist): 71 | fname = self.itemlist[index].filename 72 | self.processingSemaphore.release() 73 | return fname 74 | 75 | self.processingSemaphore.release() 76 | return '' 77 | 78 | 79 | def getdescription(self, index): 80 | self.processingSemaphore.acquire() 81 | 82 | if index >= 0 and index < len(self.itemlist): 83 | desc = self.itemlist[index].description 84 | self.processingSemaphore.release() 85 | return desc 86 | 87 | self.processingSemaphore.release() 88 | return '' 89 | 90 | 91 | def getepisodetitle(self, index): 92 | self.processingSemaphore.acquire() 93 | 94 | if index >= 0 and index < len(self.itemlist): 95 | epit = self.itemlist[index].episodetitle 96 | self.processingSemaphore.release() 97 | return epit 98 | 99 | self.processingSemaphore.release() 100 | return '' 101 | 102 | def getplaycount(self, index): 103 | self.processingSemaphore.acquire() 104 | 105 | if index >= 0 and index < len(self.itemlist): 106 | pcount = self.itemlist[index].playcount 107 | self.processingSemaphore.release() 108 | return pcount 109 | 110 | self.processingSemaphore.release() 111 | return '' 112 | 113 | def getTitle(self, index): 114 | self.processingSemaphore.acquire() 115 | 116 | if index >= 0 and index < len(self.itemlist): 117 | title = self.itemlist[index].title 118 | self.processingSemaphore.release() 119 | return title 120 | 121 | self.processingSemaphore.release() 122 | return '' 123 | 124 | 125 | def clear(self): 126 | del self.itemlist[:] 127 | self.totalDuration = 0 128 | 129 | 130 | def log(self, msg, level = xbmc.LOGDEBUG): 131 | xbmc.log('script.pseudotv-Playlist: ' + msg, level) 132 | 133 | 134 | def load(self, filename): 135 | self.log("load " + filename) 136 | self.processingSemaphore.acquire() 137 | self.clear() 138 | 139 | try: 140 | fle = FileAccess.open(filename, 'r') 141 | except IOError: 142 | self.log('Unable to open the file: ' + filename) 143 | self.processingSemaphore.release() 144 | return False 145 | 146 | # find and read the header 147 | try: 148 | lines = fle.readlines() 149 | except: 150 | self.log("ERROR loading playlist: " + filename) 151 | self.log(traceback.format_exc(), xbmc.LOGERROR) 152 | 153 | fle.close() 154 | realindex = -1 155 | 156 | for i in range(len(lines)): 157 | if lines[i].startswith('#EXTM3U'): 158 | realindex = i 159 | break 160 | 161 | if realindex == -1: 162 | self.log('Unable to find playlist header for the file: ' + filename) 163 | self.processingSemaphore.release() 164 | return False 165 | 166 | # past the header, so get the info 167 | for i in range(len(lines)): 168 | 169 | if realindex + 1 >= len(lines): 170 | break 171 | 172 | if len(self.itemlist) > 16384: 173 | break 174 | 175 | try: 176 | line = uni(lines[realindex].rstrip()) 177 | except: 178 | self.log("ERROR: Invalid line in playlist - " + filename) 179 | self.log(traceback.format_exc(), xbmc.LOGERROR) 180 | 181 | if line[:8] == '#EXTINF:': 182 | tmpitem = PlaylistItem() 183 | index = line.find(',') 184 | 185 | if index > 0: 186 | tmpitem.duration = int(line[8:index]) 187 | tmpitem.title = line[index + 1:] 188 | index = tmpitem.title.find('//') 189 | 190 | if index >= 0: 191 | tmpitem.episodetitle = tmpitem.title[index + 2:] 192 | tmpitem.title = tmpitem.title[:index] 193 | index = tmpitem.episodetitle.find('//') 194 | 195 | if index >= 0: 196 | tmpitem.description = tmpitem.episodetitle[index + 2:] 197 | tmpitem.episodetitle = tmpitem.episodetitle[:index] 198 | index = tmpitem.description.find('//') #closing off description now that there are parameters beyond it 199 | 200 | if index >= 0: #we don't actually need playcount (or resume) here but this is how we close off description 201 | tmpitem.playcount = tmpitem.description[index + 2:] 202 | tmpitem.description = tmpitem.description[:index] 203 | 204 | realindex += 1 205 | tmpitem.filename = uni(lines[realindex].rstrip()) 206 | self.itemlist.append(tmpitem) 207 | self.totalDuration += tmpitem.duration 208 | 209 | realindex += 1 210 | 211 | self.processingSemaphore.release() 212 | 213 | if len(self.itemlist) == 0: 214 | return False 215 | 216 | return True 217 | 218 | 219 | def save(self, filename): 220 | self.log("save " + filename) 221 | try: 222 | fle = FileAccess.open(filename, 'w') 223 | except: 224 | self.log("save Unable to open the smart playlist", xbmc.LOGERROR) 225 | return 226 | 227 | flewrite = uni("#EXTM3U\n") 228 | 229 | for i in range(self.size()): 230 | tmpstr = str(self.getduration(i)) + ',' 231 | tmpstr += self.getTitle(i) + "//" + self.getepisodetitle(i) + "//" + self.getdescription(i) 232 | tmpstr = uni(tmpstr[:2036]) 233 | tmpstr = tmpstr.replace("\\n", " ").replace("\\r", " ").replace("\\\"", "\"") 234 | tmpstr = tmpstr + '\n' + self.getfilename(i) 235 | flewrite += "#EXTINF:" + tmpstr + "\n" 236 | 237 | fle.write(flewrite) 238 | fle.close() 239 | 240 | -------------------------------------------------------------------------------- /resources/lib/Settings.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc, xbmcaddon, xbmcvfs 20 | import sys, re, os 21 | import time, traceback 22 | import Globals 23 | 24 | from FileAccess import FileLock, FileAccess 25 | 26 | 27 | 28 | class Settings: 29 | def __init__(self): 30 | self.logfile = xbmcvfs.translatePath(os.path.join(Globals.SETTINGS_LOC, 'settings2.xml')) 31 | self.currentSettings = [] 32 | self.alwaysWrite = 1 33 | 34 | 35 | def loadSettings(self): 36 | self.log("Loading settings from " + self.logfile) 37 | del self.currentSettings[:] 38 | 39 | if FileAccess.exists(self.logfile): 40 | try: 41 | fle = FileAccess.open(self.logfile, "r") 42 | curset = fle.readlines() 43 | fle.close() 44 | except: 45 | self.log("Exception when reading settings: ") 46 | self.log(traceback.format_exc(), xbmc.LOGERROR) 47 | 48 | for line in curset: 49 | name = re.search('setting id="(.*?)"', line) 50 | 51 | if name: 52 | val = re.search(' value="(.*?)"', line) 53 | 54 | if val: 55 | self.currentSettings.append([name.group(1), val.group(1)]) 56 | 57 | 58 | def disableWriteOnSave(self): 59 | self.alwaysWrite = 0 60 | 61 | 62 | def log(self, msg, level = xbmc.LOGDEBUG): 63 | Globals.log('Settings: ' + msg, level) 64 | 65 | 66 | def getSetting(self, name, force = False): 67 | if force: 68 | self.loadSettings() 69 | 70 | result = self.getSettingNew(name) 71 | 72 | if result is None: 73 | return self.realGetSetting(name) 74 | 75 | return result 76 | 77 | 78 | def getSettingNew(self, name): 79 | for i in range(len(self.currentSettings)): 80 | if self.currentSettings[i][0] == name: 81 | return self.currentSettings[i][1] 82 | 83 | return None 84 | 85 | 86 | def realGetSetting(self, name): 87 | try: 88 | val = Globals.ADDON.getSetting(name) 89 | return val 90 | except: 91 | return '' 92 | 93 | 94 | def setSetting(self, name, value): 95 | found = False 96 | 97 | for i in range(len(self.currentSettings)): 98 | if self.currentSettings[i][0] == name: 99 | self.currentSettings[i][1] = value 100 | found = True 101 | break 102 | 103 | if found == False: 104 | self.currentSettings.append([name, value]) 105 | 106 | if self.alwaysWrite == 1: 107 | self.writeSettings() 108 | 109 | 110 | def writeSettings(self): 111 | try: 112 | fle = FileAccess.open(self.logfile, "w") 113 | except: 114 | self.log("Unable to open the file for writing") 115 | return 116 | 117 | flewrite = Globals.uni("\n") 118 | 119 | for i in range(len(self.currentSettings)): 120 | flewrite += Globals.uni(' \n') 121 | 122 | flewrite += Globals.uni('\n') 123 | fle.write(flewrite) 124 | fle.close() 125 | -------------------------------------------------------------------------------- /resources/lib/TSParser.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, struct 21 | 22 | from Globals import ascii 23 | from FileAccess import FileAccess 24 | 25 | 26 | class TSPacket: 27 | def __init__(self): 28 | self.pid = 0 29 | self.errorbit = 1 30 | self.pesstartbit = 0 31 | self.adaption = 1 32 | self.adaptiondata = '' 33 | self.pesdata = '' 34 | 35 | 36 | class TSParser: 37 | def __init__(self): 38 | pass 39 | 40 | 41 | def log(self, msg, level = xbmc.LOGDEBUG): 42 | xbmc.log('TSParser: ' + ascii(msg), level) 43 | 44 | 45 | def determineLength(self, filename): 46 | self.log("determineLength " + filename) 47 | self.pid = -1 48 | 49 | try: 50 | self.File = FileAccess.open(filename, "rb", None) 51 | except: 52 | self.log("Unable to open the file") 53 | return 54 | 55 | self.filesize = self.getFileSize() 56 | self.packetLength = self.findPacketLength() 57 | 58 | if self.packetLength <= 0: 59 | return 0 60 | 61 | start = self.getStartTime() 62 | self.log('Start - ' + str(start)) 63 | end = self.getEndTime() 64 | self.log('End - ' + str(end)) 65 | 66 | if end > start: 67 | dur = int((end - start) / 90000) 68 | else: 69 | dur = 0 70 | 71 | self.File.close() 72 | self.log("Duration: " + str(dur)) 73 | return dur 74 | 75 | 76 | def findPacketLength(self): 77 | self.log('findPacketLength') 78 | maxbytes = 600 79 | start = 0 80 | self.packetLength = 0 81 | 82 | while maxbytes > 0: 83 | maxbytes -= 1 84 | 85 | try: 86 | data = self.File.read(1) 87 | data = struct.unpack('B', data) 88 | 89 | if data[0] == 71: 90 | if start > 0: 91 | end = self.File.tell() 92 | break 93 | else: 94 | start = self.File.tell() 95 | # A minimum of 188, so skip the rest 96 | self.File.seek(187, 1) 97 | except: 98 | self.log('Exception in findPacketLength') 99 | return 100 | 101 | if (start > 0) and (end > start): 102 | self.log('Packet Length: ' + str(int(end - start))) 103 | return (end - start) 104 | 105 | return 106 | 107 | 108 | def getFileSize(self): 109 | size = 0 110 | 111 | try: 112 | pos = self.File.tell() 113 | self.File.seek(0, 2) 114 | size = self.File.tell() 115 | self.File.seek(pos, 0) 116 | except: 117 | pass 118 | 119 | return size 120 | 121 | 122 | def getStartTime(self): 123 | # A reasonably high number of retries in case the PES starts in the middle 124 | # and is it's maximum length 125 | maxpackets = 12000 126 | self.log('getStartTime') 127 | 128 | try: 129 | self.File.seek(0, 0) 130 | except: 131 | return 0 132 | 133 | while maxpackets > 0: 134 | packet = self.readTSPacket() 135 | maxpackets -= 1 136 | 137 | if packet == None: 138 | return 0 139 | 140 | if packet.errorbit == 0 and packet.pesstartbit == 1: 141 | ret = self.getPTS(packet) 142 | 143 | if ret > 0: 144 | self.pid = packet.pid 145 | self.log('PID: ' + str(self.pid)) 146 | return ret 147 | 148 | return 0 149 | 150 | 151 | def getEndTime(self): 152 | self.log('getEndTime') 153 | packetcount = int(self.filesize / self.packetLength) 154 | 155 | try: 156 | self.File.seek((packetcount * self.packetLength)- self.packetLength, 0) 157 | except: 158 | return 0 159 | 160 | maxpackets = 12000 161 | 162 | while maxpackets > 0: 163 | packet = self.readTSPacket() 164 | maxpackets -= 1 165 | 166 | if packet == None: 167 | self.log('getEndTime got a null packet') 168 | return 0 169 | 170 | if packet.errorbit == 0 and packet.pesstartbit == 1 and packet.pid == self.pid: 171 | ret = self.getPTS(packet) 172 | 173 | if ret > 0: 174 | self.log('getEndTime returning time') 175 | return ret 176 | else: 177 | try: 178 | self.File.seek(-1 * (self.packetLength * 2), 1) 179 | except: 180 | self.log('exception') 181 | return 0 182 | 183 | self.log('getEndTime no found end time') 184 | return 0 185 | 186 | 187 | def getPTS(self, packet): 188 | timestamp = 0 189 | self.log('getPTS') 190 | 191 | try: 192 | data = struct.unpack('19B', packet.pesdata[:19]) 193 | 194 | # start code 195 | if data[0] == 0 and data[1] == 0 and data[2] == 1: 196 | # cant be a navigation packet 197 | if data[3] != 190 and data[3] != 191: 198 | offset = 0 199 | 200 | if (data[9] >> 4) == 3: 201 | offset = 5 202 | 203 | # a little dangerous...ignoring the LSB of the timestamp 204 | timestamp = ((data[9 + offset] >> 1) & 7) << 30 205 | timestamp = timestamp | (data[10 + offset] << 22) 206 | timestamp = timestamp | ((data[11 + offset] >> 1) << 15) 207 | timestamp = timestamp | (data[12 + offset] << 7) 208 | timestamp = timestamp | (data[13 + offset] >> 1) 209 | return timestamp 210 | except: 211 | self.log('exception in getPTS') 212 | pass 213 | 214 | self.log('getPTS returning 0') 215 | return 0 216 | 217 | 218 | def readTSPacket(self): 219 | packet = TSPacket() 220 | pos = 0 221 | 222 | try: 223 | data = self.File.read(4) 224 | pos = 4 225 | data = struct.unpack('4B', data) 226 | 227 | if data[0] == 71: 228 | packet.pid = (data[1] & 31) << 8 229 | packet.pid = packet.pid | data[2] 230 | 231 | # skip tables and null packets 232 | if packet.pid < 21 or packet.pid == 8191: 233 | self.File.seek(self.packetLength - 4, 1) 234 | else: 235 | packet.adaption = (data[3] >> 4) & 3 236 | packet.errorbit = data[1] >> 7 237 | packet.pesstartbit = (data[1] >> 6) & 1 238 | 239 | if packet.adaption > 1: 240 | data = self.File.read(1) 241 | length = struct.unpack('B', data)[0] 242 | 243 | if length > 0: 244 | data = self.File.read(length) 245 | else: 246 | length = 0 247 | 248 | pos += length + 1 249 | 250 | if pos < 188: 251 | # read the PES data 252 | packet.pesdata = self.File.read(self.packetLength - pos) 253 | except: 254 | self.log('readTSPacket exception') 255 | return None 256 | 257 | return packet 258 | -------------------------------------------------------------------------------- /resources/lib/VideoParser.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, platform 21 | import subprocess 22 | 23 | import VideoParserFFProbe as VideoParserFFProbe 24 | 25 | import Globals, xbmcvfs 26 | from FileAccess import FileAccess 27 | from Globals import * 28 | 29 | class VideoParser: 30 | def __init__(self): 31 | self.Exts = ['.mkv', '.mp4', '.m4v', '.3gp', '.3g2', '.f4v', '.mov', '.avi', '.flv', '.ts', '.m2ts'] 32 | self.durationFile = xbmcvfs.translatePath(os.path.join(Globals.SETTINGS_LOC, 'filedurations.txt')) 33 | 34 | 35 | def log(self, msg, level = xbmc.LOGDEBUG): 36 | log('VideoParser: ' + msg, level) 37 | 38 | 39 | def getVideoLength(self, filename): 40 | self.log("getVideoLength " + str(filename)) 41 | 42 | if len(filename) == 0: 43 | self.log("No file name specified") 44 | return 0 45 | 46 | if FileAccess.exists(filename) == False: 47 | self.log("Unable to find the file") 48 | return 0 49 | 50 | fileDuration = self.readDurationFile(filename) 51 | if fileDuration == False: 52 | 53 | base, ext = os.path.splitext(filename) 54 | ext = ext.lower() 55 | 56 | if ext in self.Exts: 57 | self.parser = VideoParserFFProbe.VideoParserFFProbe() 58 | 59 | else: 60 | self.log("Unsupported extension " + str(ext)) 61 | return 0 62 | 63 | #try: 64 | 65 | duration = self.parser.determineLength(filename) 66 | if duration != 0: 67 | self.writeDuration(filename, duration) 68 | 69 | return duration 70 | 71 | #except: 72 | # self.log("Exception trying FFPROBE - see ReadMe on installing FFMEG") 73 | # return 0 74 | 75 | else: 76 | return fileDuration 77 | 78 | def readDurationFile(self, filename): 79 | self.log('RDF readDurationFile: ' + filename) 80 | if FileAccess.exists(self.durationFile): 81 | 82 | with open(self.durationFile, 'r') as fp: 83 | for l_no, line in enumerate(fp): 84 | # search string 85 | # self.log('RDF line: :' + str(line)) 86 | 87 | if filename in line: 88 | #self.log('RDF string found in a file') 89 | #self.log('RDF Line Number: ' + str(l_no)) 90 | #self.log('RDF Line: ' + str(line)) 91 | 92 | splitLine=line.split('|') 93 | duration = float(splitLine[1]) 94 | 95 | self.log('RDF duration: ' + str(duration)) 96 | return int(duration) 97 | # don't look for next lines 98 | break 99 | else: 100 | self.log('RDF readDurationFile - No Match') 101 | return False 102 | else: 103 | self.log('RDF no file yet') 104 | return False 105 | 106 | 107 | def writeDuration(self, filename, duration): 108 | if FileAccess.exists(self.durationFile): 109 | self.log('writeDuration found file, append') 110 | append_write = 'a' 111 | else: 112 | self.log('writeDuration file not found, make new') 113 | append_write = 'w' 114 | 115 | fle = open(self.durationFile, append_write, encoding="utf-8") 116 | 117 | flewrite = (Globals.uni(filename) + "|" + Globals.uni(str(duration)) + "\n") 118 | 119 | fle.write(flewrite) 120 | fle.close() 121 | 122 | 123 | #except: 124 | # self.log("Unable to open the duration file for writing") 125 | # return 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /resources/lib/VideoParserFFProbe.py: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2011 Jason Anderson 2 | # 3 | # 4 | # This file is part of PseudoTV. 5 | # 6 | # PseudoTV is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # PseudoTV is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with PseudoTV. If not, see . 18 | 19 | import xbmc 20 | import os, struct 21 | import traceback 22 | 23 | from Globals import ascii 24 | from FileAccess import FileAccess 25 | 26 | import subprocess 27 | 28 | 29 | 30 | class VideoParserFFProbe: 31 | def log(self, msg, level = xbmc.LOGDEBUG): 32 | xbmc.log('script.pseudotv-VideoParserFFProbe: ' + ascii(msg), level) 33 | 34 | 35 | def determineLength(self, filename): 36 | 37 | 38 | if os.name == "nt": 39 | 40 | result = subprocess.run(["ffprobe", "-v", "quiet", "-show_entries", 41 | "format=duration", "-of", 42 | "default=noprint_wrappers=1:nokey=1", filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) 43 | 44 | else: 45 | 46 | result = subprocess.run(["ffprobe", "-v", "quiet", "-show_entries", 47 | "format=duration", "-of", 48 | "default=noprint_wrappers=1:nokey=1", filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 49 | 50 | tempDur = str(result.stdout) 51 | self.log ('result.stdout: ' + tempDur) 52 | 53 | 54 | if ('Header missing' in tempDur) or ('invalid' in tempDur) or ('Invalid' in tempDur): 55 | self.log ('Header missing') 56 | spiltDur = tempDur.split('\\',1) 57 | spiltDur = spiltDur[0].split('\'',1) 58 | durationfloat = float(spiltDur[1]) 59 | self.log ('durationfloat= ' + str(durationfloat)) 60 | else: 61 | try: 62 | durationfloat = float(result.stdout) 63 | except: 64 | self.log("Exception attempting to convert duration to float: " + filename + " " + str(result.stdout)) 65 | durationfloat = 0 66 | 67 | duration = int(durationfloat) 68 | 69 | self.log ('determined length for ' + filename + ' is: ' + str(duration)) 70 | 71 | return duration 72 | -------------------------------------------------------------------------------- /resources/logos/A&E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/A&E.png -------------------------------------------------------------------------------- /resources/logos/ABC (US).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/ABC (US).png -------------------------------------------------------------------------------- /resources/logos/ABC Family.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/ABC Family.png -------------------------------------------------------------------------------- /resources/logos/ABC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/ABC.png -------------------------------------------------------------------------------- /resources/logos/AMC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/AMC.png -------------------------------------------------------------------------------- /resources/logos/ARD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/ARD.png -------------------------------------------------------------------------------- /resources/logos/AXN Beyond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/AXN Beyond.png -------------------------------------------------------------------------------- /resources/logos/AXN SciFi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/AXN SciFi.png -------------------------------------------------------------------------------- /resources/logos/Action Max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Action Max.png -------------------------------------------------------------------------------- /resources/logos/Action Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Action Movies.png -------------------------------------------------------------------------------- /resources/logos/Action TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Action TV.png -------------------------------------------------------------------------------- /resources/logos/Action and Adventure TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Action and Adventure TV.png -------------------------------------------------------------------------------- /resources/logos/Action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Action.png -------------------------------------------------------------------------------- /resources/logos/Adult Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Adult Movies.png -------------------------------------------------------------------------------- /resources/logos/Adventure Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Adventure Movies.png -------------------------------------------------------------------------------- /resources/logos/Adventure TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Adventure TV.png -------------------------------------------------------------------------------- /resources/logos/Adventure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Adventure.png -------------------------------------------------------------------------------- /resources/logos/Amazon Prime Video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Amazon Prime Video.png -------------------------------------------------------------------------------- /resources/logos/Amazon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Amazon.png -------------------------------------------------------------------------------- /resources/logos/Animal Planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Animal Planet.png -------------------------------------------------------------------------------- /resources/logos/Animation Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Animation Movies.png -------------------------------------------------------------------------------- /resources/logos/Animation TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Animation TV.png -------------------------------------------------------------------------------- /resources/logos/Animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Animation.png -------------------------------------------------------------------------------- /resources/logos/Animax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Animax.png -------------------------------------------------------------------------------- /resources/logos/Anime Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Anime Movies.png -------------------------------------------------------------------------------- /resources/logos/Anime TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Anime TV.png -------------------------------------------------------------------------------- /resources/logos/Apple TV+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Apple TV+.png -------------------------------------------------------------------------------- /resources/logos/BBC 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC 2.png -------------------------------------------------------------------------------- /resources/logos/BBC Four.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC Four.png -------------------------------------------------------------------------------- /resources/logos/BBC HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC HD.png -------------------------------------------------------------------------------- /resources/logos/BBC Knowledge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC Knowledge.png -------------------------------------------------------------------------------- /resources/logos/BBC One.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC One.png -------------------------------------------------------------------------------- /resources/logos/BBC Three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC Three.png -------------------------------------------------------------------------------- /resources/logos/BBC Two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC Two.png -------------------------------------------------------------------------------- /resources/logos/BBC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BBC.png -------------------------------------------------------------------------------- /resources/logos/BET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/BET.png -------------------------------------------------------------------------------- /resources/logos/Biography Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Biography Movies.png -------------------------------------------------------------------------------- /resources/logos/Biography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Biography.png -------------------------------------------------------------------------------- /resources/logos/Boomerang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Boomerang.png -------------------------------------------------------------------------------- /resources/logos/CBC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/CBC.png -------------------------------------------------------------------------------- /resources/logos/CBS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/CBS.png -------------------------------------------------------------------------------- /resources/logos/CN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/CN.png -------------------------------------------------------------------------------- /resources/logos/CTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/CTV.png -------------------------------------------------------------------------------- /resources/logos/Canal+ Drama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Canal+ Drama.png -------------------------------------------------------------------------------- /resources/logos/Cartoon Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Cartoon Network.png -------------------------------------------------------------------------------- /resources/logos/Channel 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Channel 4.png -------------------------------------------------------------------------------- /resources/logos/Channel Anime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Channel Anime.png -------------------------------------------------------------------------------- /resources/logos/Children TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Children TV.png -------------------------------------------------------------------------------- /resources/logos/Chiller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Chiller.png -------------------------------------------------------------------------------- /resources/logos/Christmas TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Christmas TV.png -------------------------------------------------------------------------------- /resources/logos/Christmas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Christmas.png -------------------------------------------------------------------------------- /resources/logos/Cine FX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Cine FX.png -------------------------------------------------------------------------------- /resources/logos/Cine First.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Cine First.png -------------------------------------------------------------------------------- /resources/logos/Cinemax HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Cinemax HD.png -------------------------------------------------------------------------------- /resources/logos/Cinemax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Cinemax.png -------------------------------------------------------------------------------- /resources/logos/City TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/City TV.png -------------------------------------------------------------------------------- /resources/logos/Comedy Central.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Comedy Central.png -------------------------------------------------------------------------------- /resources/logos/Comedy Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Comedy Movies.png -------------------------------------------------------------------------------- /resources/logos/Comedy TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Comedy TV.png -------------------------------------------------------------------------------- /resources/logos/Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Comedy.png -------------------------------------------------------------------------------- /resources/logos/ComedyCentral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/ComedyCentral.png -------------------------------------------------------------------------------- /resources/logos/Comet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Comet.png -------------------------------------------------------------------------------- /resources/logos/Concert Live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Concert Live.png -------------------------------------------------------------------------------- /resources/logos/Crime Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Crime Movies.png -------------------------------------------------------------------------------- /resources/logos/Crime TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Crime TV.png -------------------------------------------------------------------------------- /resources/logos/Crime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Crime.png -------------------------------------------------------------------------------- /resources/logos/DC Comics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/DC Comics.png -------------------------------------------------------------------------------- /resources/logos/DJs from Mars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/DJs from Mars.png -------------------------------------------------------------------------------- /resources/logos/Discovery HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Discovery HD.png -------------------------------------------------------------------------------- /resources/logos/Discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Discovery.png -------------------------------------------------------------------------------- /resources/logos/Disney Channel New.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Disney Channel New.png -------------------------------------------------------------------------------- /resources/logos/Disney Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Disney Channel.png -------------------------------------------------------------------------------- /resources/logos/Disney Sig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Disney Sig.png -------------------------------------------------------------------------------- /resources/logos/Disney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Disney.png -------------------------------------------------------------------------------- /resources/logos/Documentary Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Documentary Movies.png -------------------------------------------------------------------------------- /resources/logos/Documentary TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Documentary TV.png -------------------------------------------------------------------------------- /resources/logos/Documentary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Documentary.png -------------------------------------------------------------------------------- /resources/logos/Dourama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Dourama.png -------------------------------------------------------------------------------- /resources/logos/Drama Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Drama Movies.png -------------------------------------------------------------------------------- /resources/logos/Drama TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Drama TV.png -------------------------------------------------------------------------------- /resources/logos/Drama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Drama.png -------------------------------------------------------------------------------- /resources/logos/Dreamworks SKG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Dreamworks SKG.png -------------------------------------------------------------------------------- /resources/logos/E!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/E!.png -------------------------------------------------------------------------------- /resources/logos/Encore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Encore.png -------------------------------------------------------------------------------- /resources/logos/Energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Energy.png -------------------------------------------------------------------------------- /resources/logos/FOX (US).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/FOX (US).png -------------------------------------------------------------------------------- /resources/logos/FOX Life.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/FOX Life.png -------------------------------------------------------------------------------- /resources/logos/FOX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/FOX.png -------------------------------------------------------------------------------- /resources/logos/FX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/FX.png -------------------------------------------------------------------------------- /resources/logos/Family Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Family Movies.png -------------------------------------------------------------------------------- /resources/logos/Family.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Family.png -------------------------------------------------------------------------------- /resources/logos/Fantasy Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Fantasy Movies.png -------------------------------------------------------------------------------- /resources/logos/Fantasy TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Fantasy TV.png -------------------------------------------------------------------------------- /resources/logos/Fantasy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Fantasy.png -------------------------------------------------------------------------------- /resources/logos/FitTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/FitTV.png -------------------------------------------------------------------------------- /resources/logos/Five.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Five.png -------------------------------------------------------------------------------- /resources/logos/Food Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Food Network.png -------------------------------------------------------------------------------- /resources/logos/Foreign Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Foreign Movies.png -------------------------------------------------------------------------------- /resources/logos/Foreign TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Foreign TV.png -------------------------------------------------------------------------------- /resources/logos/Fox Kids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Fox Kids.png -------------------------------------------------------------------------------- /resources/logos/Frisbee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Frisbee.png -------------------------------------------------------------------------------- /resources/logos/G4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/G4.png -------------------------------------------------------------------------------- /resources/logos/GTtv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/GTtv.png -------------------------------------------------------------------------------- /resources/logos/Global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Global.png -------------------------------------------------------------------------------- /resources/logos/Grenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Grenade.png -------------------------------------------------------------------------------- /resources/logos/HBO Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/HBO Comedy.png -------------------------------------------------------------------------------- /resources/logos/HBO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/HBO.png -------------------------------------------------------------------------------- /resources/logos/Halloween.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Halloween.png -------------------------------------------------------------------------------- /resources/logos/Historical Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Historical Movies.png -------------------------------------------------------------------------------- /resources/logos/History HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/History HD.png -------------------------------------------------------------------------------- /resources/logos/History Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/History Movies.png -------------------------------------------------------------------------------- /resources/logos/History TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/History TV.png -------------------------------------------------------------------------------- /resources/logos/History.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/History.png -------------------------------------------------------------------------------- /resources/logos/Horror Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Horror Movies.png -------------------------------------------------------------------------------- /resources/logos/Horror TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Horror TV.png -------------------------------------------------------------------------------- /resources/logos/Horror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Horror.png -------------------------------------------------------------------------------- /resources/logos/IMAX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/IMAX.png -------------------------------------------------------------------------------- /resources/logos/ITV1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/ITV1.png -------------------------------------------------------------------------------- /resources/logos/Kerrang!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Kerrang!.png -------------------------------------------------------------------------------- /resources/logos/Kid TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Kid TV.png -------------------------------------------------------------------------------- /resources/logos/Kids TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Kids TV.png -------------------------------------------------------------------------------- /resources/logos/LA Muscle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/LA Muscle.png -------------------------------------------------------------------------------- /resources/logos/Lifetime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Lifetime.png -------------------------------------------------------------------------------- /resources/logos/Live Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Live Music.png -------------------------------------------------------------------------------- /resources/logos/MGM HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/MGM HD.png -------------------------------------------------------------------------------- /resources/logos/MTV Classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/MTV Classic.png -------------------------------------------------------------------------------- /resources/logos/MTV Dance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/MTV Dance.png -------------------------------------------------------------------------------- /resources/logos/MTV Trax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/MTV Trax.png -------------------------------------------------------------------------------- /resources/logos/MTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/MTV.png -------------------------------------------------------------------------------- /resources/logos/Mad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Mad.png -------------------------------------------------------------------------------- /resources/logos/Marvel Studios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Marvel Studios.png -------------------------------------------------------------------------------- /resources/logos/Marvel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Marvel.png -------------------------------------------------------------------------------- /resources/logos/MeTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/MeTV.png -------------------------------------------------------------------------------- /resources/logos/Mini-Series TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Mini-Series TV.png -------------------------------------------------------------------------------- /resources/logos/Mobsters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Mobsters.png -------------------------------------------------------------------------------- /resources/logos/Movies24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Movies24.png -------------------------------------------------------------------------------- /resources/logos/Music Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Music Movies.png -------------------------------------------------------------------------------- /resources/logos/Mystery Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Mystery Movies.png -------------------------------------------------------------------------------- /resources/logos/Mystery TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Mystery TV.png -------------------------------------------------------------------------------- /resources/logos/Mystery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Mystery.png -------------------------------------------------------------------------------- /resources/logos/NBC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/NBC.png -------------------------------------------------------------------------------- /resources/logos/National Geographic HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/National Geographic HD.png -------------------------------------------------------------------------------- /resources/logos/National Geographic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/National Geographic.png -------------------------------------------------------------------------------- /resources/logos/Nature Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Nature Channel.png -------------------------------------------------------------------------------- /resources/logos/Nature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Nature.png -------------------------------------------------------------------------------- /resources/logos/Netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Netflix.png -------------------------------------------------------------------------------- /resources/logos/Nickelodeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Nickelodeon.png -------------------------------------------------------------------------------- /resources/logos/Nova Cinema 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Nova Cinema 1.png -------------------------------------------------------------------------------- /resources/logos/Nova Cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Nova Cinema.png -------------------------------------------------------------------------------- /resources/logos/Oldies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Oldies.png -------------------------------------------------------------------------------- /resources/logos/Orange Cinemax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Orange Cinemax.png -------------------------------------------------------------------------------- /resources/logos/Oscar Cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Oscar Cinema.png -------------------------------------------------------------------------------- /resources/logos/PBS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/PBS.png -------------------------------------------------------------------------------- /resources/logos/Paramount Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Paramount Comedy.png -------------------------------------------------------------------------------- /resources/logos/Pixar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Pixar.png -------------------------------------------------------------------------------- /resources/logos/Premium Cinema Energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Premium Cinema Energy.png -------------------------------------------------------------------------------- /resources/logos/Premium Cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Premium Cinema.png -------------------------------------------------------------------------------- /resources/logos/Q Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Q Music.png -------------------------------------------------------------------------------- /resources/logos/Quest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Quest.png -------------------------------------------------------------------------------- /resources/logos/Quibi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Quibi.png -------------------------------------------------------------------------------- /resources/logos/Qulli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Qulli.png -------------------------------------------------------------------------------- /resources/logos/Real TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Real TV.png -------------------------------------------------------------------------------- /resources/logos/Reality TV TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Reality TV TV.png -------------------------------------------------------------------------------- /resources/logos/Reality TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Reality TV.png -------------------------------------------------------------------------------- /resources/logos/Recent Releases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Recent Releases.png -------------------------------------------------------------------------------- /resources/logos/Romance Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Romance Movies.png -------------------------------------------------------------------------------- /resources/logos/Romance TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Romance TV.png -------------------------------------------------------------------------------- /resources/logos/Romance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Romance.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sci-Fi HD.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sci-Fi Movies.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sci-Fi TV.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sci-Fi.png -------------------------------------------------------------------------------- /resources/logos/SciFi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/SciFi.png -------------------------------------------------------------------------------- /resources/logos/Science Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Science Channel.png -------------------------------------------------------------------------------- /resources/logos/Science Fiction Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Science Fiction Movies.png -------------------------------------------------------------------------------- /resources/logos/Science Fiction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Science Fiction.png -------------------------------------------------------------------------------- /resources/logos/Science-Fiction TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Science-Fiction TV.png -------------------------------------------------------------------------------- /resources/logos/Science.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Science.png -------------------------------------------------------------------------------- /resources/logos/Showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Showcase.png -------------------------------------------------------------------------------- /resources/logos/Showtime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Showtime.png -------------------------------------------------------------------------------- /resources/logos/Silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Silver.png -------------------------------------------------------------------------------- /resources/logos/Sketchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sketchy.png -------------------------------------------------------------------------------- /resources/logos/Sky Movies HD Family.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sky Movies HD Family.png -------------------------------------------------------------------------------- /resources/logos/Sky1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sky1.png -------------------------------------------------------------------------------- /resources/logos/Sony Max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sony Max.png -------------------------------------------------------------------------------- /resources/logos/Space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Space.png -------------------------------------------------------------------------------- /resources/logos/Spielberg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Spielberg.png -------------------------------------------------------------------------------- /resources/logos/Spike TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Spike TV.png -------------------------------------------------------------------------------- /resources/logos/Sports Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Sports Movies.png -------------------------------------------------------------------------------- /resources/logos/Star Movies HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Star Movies HD.png -------------------------------------------------------------------------------- /resources/logos/Star Plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Star Plus.png -------------------------------------------------------------------------------- /resources/logos/Star Wars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Star Wars.png -------------------------------------------------------------------------------- /resources/logos/Starz!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Starz!.png -------------------------------------------------------------------------------- /resources/logos/Starz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Starz.png -------------------------------------------------------------------------------- /resources/logos/Suspense Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Suspense Movies.png -------------------------------------------------------------------------------- /resources/logos/Suspense TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Suspense TV.png -------------------------------------------------------------------------------- /resources/logos/Suspense.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Suspense.png -------------------------------------------------------------------------------- /resources/logos/Syfy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Syfy.png -------------------------------------------------------------------------------- /resources/logos/Syndicated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Syndicated.png -------------------------------------------------------------------------------- /resources/logos/TCM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TCM.png -------------------------------------------------------------------------------- /resources/logos/TED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TED.png -------------------------------------------------------------------------------- /resources/logos/TLC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TLC.png -------------------------------------------------------------------------------- /resources/logos/TNT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TNT.png -------------------------------------------------------------------------------- /resources/logos/TV Land.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TV Land.png -------------------------------------------------------------------------------- /resources/logos/TV Movie Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TV Movie Movies.png -------------------------------------------------------------------------------- /resources/logos/TV Movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/TV Movie.png -------------------------------------------------------------------------------- /resources/logos/The 2000s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/The 2000s.png -------------------------------------------------------------------------------- /resources/logos/The 80s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/The 80s.png -------------------------------------------------------------------------------- /resources/logos/The 90s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/The 90s.png -------------------------------------------------------------------------------- /resources/logos/The CW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/The CW.png -------------------------------------------------------------------------------- /resources/logos/The Comedy Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/The Comedy Channel.png -------------------------------------------------------------------------------- /resources/logos/The Poker Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/The Poker Channel.png -------------------------------------------------------------------------------- /resources/logos/Thriller Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Thriller Movies.png -------------------------------------------------------------------------------- /resources/logos/Thriller TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Thriller TV.png -------------------------------------------------------------------------------- /resources/logos/Thriller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Thriller.png -------------------------------------------------------------------------------- /resources/logos/Travel Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Travel Channel.png -------------------------------------------------------------------------------- /resources/logos/Turbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Turbo.png -------------------------------------------------------------------------------- /resources/logos/Turner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Turner.png -------------------------------------------------------------------------------- /resources/logos/UPN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/UPN.png -------------------------------------------------------------------------------- /resources/logos/USA Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/USA Network.png -------------------------------------------------------------------------------- /resources/logos/USA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/USA.png -------------------------------------------------------------------------------- /resources/logos/Universal Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Universal Channel.png -------------------------------------------------------------------------------- /resources/logos/Universal Network Television.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Universal Network Television.png -------------------------------------------------------------------------------- /resources/logos/VH1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/VH1.png -------------------------------------------------------------------------------- /resources/logos/Versus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Versus.png -------------------------------------------------------------------------------- /resources/logos/War Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/War Movies.png -------------------------------------------------------------------------------- /resources/logos/War TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/War TV.png -------------------------------------------------------------------------------- /resources/logos/Warner Bros.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Warner Bros.png -------------------------------------------------------------------------------- /resources/logos/Western Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Western Movies.png -------------------------------------------------------------------------------- /resources/logos/Western TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Western TV.png -------------------------------------------------------------------------------- /resources/logos/Western.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Western.png -------------------------------------------------------------------------------- /resources/logos/WorshipTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/WorshipTV.png -------------------------------------------------------------------------------- /resources/logos/Zumba Fitness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/logos/Zumba Fitness.png -------------------------------------------------------------------------------- /resources/screenshots/Commercial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/screenshots/Commercial.png -------------------------------------------------------------------------------- /resources/screenshots/EPG1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/screenshots/EPG1.png -------------------------------------------------------------------------------- /resources/screenshots/EPG2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/screenshots/EPG2.png -------------------------------------------------------------------------------- /resources/screenshots/screenshot-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/screenshots/screenshot-01.png -------------------------------------------------------------------------------- /resources/screenshots/screenshot-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/screenshots/screenshot-02.png -------------------------------------------------------------------------------- /resources/settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /resources/skins/default/media/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/Default.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonFocus.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonFocusShort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonFocusShort.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocus.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusAlt1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusAlt1.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusAlt1Short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusAlt1Short.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusAlt2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusAlt2.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusAlt2Short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusAlt2Short.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusAlt3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusAlt3.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusAlt3Short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusAlt3Short.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocusShort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvButtonNoFocusShort.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvTimeBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/pstvTimeBar.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_DefaultVideo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_DefaultVideo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_InfoBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_InfoBar.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_LogoBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_LogoBack.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_black.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_clock.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/0.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/10.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/4.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/5.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/6.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/7.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiochannel/8.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/aac.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aac_latm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/aac_latm.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/ac3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/ac3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/aif.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aifc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/aifc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/aiff.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/alac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/alac.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/ape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/ape.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/avc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/avc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/cdda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/cdda.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/dca.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dolbydigital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/dolbydigital.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/dts.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dtshd_hra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/dtshd_hra.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dtshd_ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/dtshd_ma.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dtsma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/dtsma.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/eac3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/eac3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/flac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/flac.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/m4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/m4a.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/mp1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/mp2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/mp3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp3float.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/mp3float.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/ogg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/ogg.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/opus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/opus.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/pcm.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm_bluray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/pcm_bluray.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm_s16le.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/pcm_s16le.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm_s24le.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/pcm_s24le.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/truehd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/truehd.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/vorbis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/vorbis.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/wav.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wavpack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/wavpack.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/wma.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wmapro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/wmapro.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wmav2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/audiocodec/wmav2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/ptv_cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/ptv_cc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/avc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/avc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/bluray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/bluray.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/div3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/div3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/divx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/divx.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/dvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/dvd.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/dx50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/dx50.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/flv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/flv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/h264.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/h264.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hddvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/hddvd.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hdmv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/hdmv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hev1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/hev1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hevc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/hevc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hvc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/hvc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mp4v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/mp4v.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/mpeg1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg1video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/mpeg1video.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/mpeg2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg2video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/mpeg2video.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/mpeg4.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/tv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vc-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/vc-1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/vc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vhs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/vhs.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vp8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/vp8.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vp9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/vp9.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/wmv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/wmv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/wmv3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/wmv3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/wvc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/wvc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/xvid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videocodec/xvid.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/1080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videoresolution/1080.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videoresolution/480.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/4k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videoresolution/4k.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/540.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videoresolution/540.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/576.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videoresolution/576.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/720.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_flags/videoresolution/720.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_logo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_nub_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_nub_bar.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_arrow-down.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_arrow-up.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_dialog-bg-solid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_dialog-bg-solid.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_dialogbutton-fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_dialogbutton-fo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_dialogbutton-nofo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_dialogbutton-nofo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_focus.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_radio-button-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_radio-button-off.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_radio-button-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_radio-button-on.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_separator.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_white70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_settings/ptv_white70.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_thumb_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_thumb_shadow.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_white50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/default/media/ptv_white50.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/Default.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonFocus.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonFocusShort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonFocusShort.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocus.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusAlt1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusAlt1.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusAlt1Short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusAlt1Short.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusAlt2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusAlt2.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusAlt2Short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusAlt2Short.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusAlt3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusAlt3.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusAlt3Short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusAlt3Short.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocusShort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvButtonNoFocusShort.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvTimeBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/pstvTimeBar.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_InfoBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/ptv_InfoBar.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_LogoBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/ptv_LogoBack.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/ptv_clock.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/ptv_logo.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/ptv_separator.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_thumb_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fnord12/script.pseudotv/01bd478c65390e79c5899dfc6861e5a2ec9e02b7/resources/skins/skin.estuary/media/ptv_thumb_shadow.png -------------------------------------------------------------------------------- /service.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding: utf-8 3 | 4 | import xbmc 5 | import xbmcaddon 6 | 7 | ADDON = xbmcaddon.Addon() 8 | ADDON_ID = ADDON.getAddonInfo('id') 9 | LANGUAGE = ADDON.getLocalizedString 10 | ADDON_NAME = ADDON.getAddonInfo('name') 11 | ICON = ADDON.getAddonInfo('icon') 12 | 13 | timer_amounts = [0, 5, 10, 15, 20] 14 | 15 | IDLE_TIME = timer_amounts[int(ADDON.getSetting("timer_amount"))] 16 | Msg = ADDON.getSetting('notify') 17 | Enabled = ADDON.getSetting('enable') 18 | 19 | def autostart(): 20 | if (Msg == 'true'): 21 | xbmc.executebuiltin("Notification( %s, %s, %d, %s)" % (ADDON_NAME, LANGUAGE(30030), 4000, ICON)) 22 | xbmc.sleep(IDLE_TIME*1000) 23 | xbmc.executebuiltin("RunScript("+ADDON_ID+")") 24 | xbmc.log("AUTOSTART PTV: Service Started...") 25 | 26 | if (Enabled == 'true'): 27 | autostart() 28 | --------------------------------------------------------------------------------