├── .gitignore ├── LICENSE.txt ├── README.md ├── 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 ├── 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 TV.png │ ├── Action.png │ ├── Adult Movies.png │ ├── Adventure Movies.png │ ├── Adventure TV.png │ ├── Adventure.png │ ├── Amazon.png │ ├── Animal Planet.png │ ├── Animation Movies.png │ ├── Animax.png │ ├── BBC Four.png │ ├── BBC HD.png │ ├── BBC Knowledge.png │ ├── BBC Three.png │ ├── BBC Two.png │ ├── BET.png │ ├── Biography Movies.png │ ├── Biography.png │ ├── Boomerang.png │ ├── CBC.png │ ├── CN.png │ ├── CTV.png │ ├── Canal+ Drama.png │ ├── Cartoon Network.png │ ├── Channel 4.png │ ├── Children TV.png │ ├── Chiller.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 │ ├── 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.png │ ├── Disney.png │ ├── Documentary Movies.png │ ├── Documentary TV.png │ ├── Documentary.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 │ ├── Fantasy Movies.png │ ├── Fantasy TV.png │ ├── Fantasy.png │ ├── FitTV.png │ ├── Five.png │ ├── Food Network.png │ ├── Fox Kids.png │ ├── Frisbee.png │ ├── G4.png │ ├── GTtv.png │ ├── Global.png │ ├── Grenade.png │ ├── HBO Comedy.png │ ├── HBO.png │ ├── Historical Movies.png │ ├── History HD.png │ ├── History.png │ ├── Horror Movies.png │ ├── Horror TV.png │ ├── Horror.png │ ├── IMAX.png │ ├── ITV1.png │ ├── Kerrang!.png │ ├── Kid TV.png │ ├── LA Muscle.png │ ├── Lifetime.png │ ├── Live Music.png │ ├── MGM HD.png │ ├── MTV Dance.png │ ├── MTV Trax.png │ ├── MTV.png │ ├── Mad.png │ ├── Marvel Studios.png │ ├── Marvel.png │ ├── Mini-Series TV.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 │ ├── Orange Cinemax.png │ ├── Oscar Cinema.png │ ├── Paramount Comedy.png │ ├── Pixar.png │ ├── Premium Cinema Energy.png │ ├── Premium Cinema.png │ ├── Q Music.png │ ├── Quest.png │ ├── Qulli.png │ ├── Real TV.png │ ├── Recent Releases.png │ ├── Romance Movies.png │ ├── Romance TV.png │ ├── Sci-Fi HD.png │ ├── Sci-Fi Movies.png │ ├── Sci-Fi TV.png │ ├── Sci-Fi.png │ ├── SciFi.png │ ├── Science Channel.png │ ├── Science-Fiction TV.png │ ├── Science.png │ ├── Showcase.png │ ├── Showtime.png │ ├── Silver.png │ ├── Sky Movies HD Family.png │ ├── Sky1.png │ ├── Sony Max.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 │ ├── 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 │ ├── Warner Bros.png │ ├── Western Movies.png │ ├── Western TV.png │ ├── Western.png │ ├── Zumba Fitness.png │ ├── action and adventure tv.png │ ├── action movies.png │ ├── animation tv.png │ ├── animation.png │ ├── bbc 2.png │ ├── bbc one.png │ ├── bbc.png │ ├── cbs.png │ ├── christmas.png │ ├── comedycentral.png │ ├── halloween.png │ ├── history movies.png │ ├── mobsters.png │ ├── movies24.png │ ├── oldies.png │ ├── pbs.png │ ├── science fiction movies.png │ ├── science fiction.png │ ├── space.png │ └── spielberg.png ├── screenshots │ ├── 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.TVOverlay.xml │ └── media │ │ ├── pstvButtonFocus.png │ │ ├── pstvButtonNoFocus.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 │ ├── pstvButtonFocus.png │ ├── pstvButtonNoFocus.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.TVOverlay.xml └── service.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyo 2 | *Thumbs.db 3 | .vscode -------------------------------------------------------------------------------- /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 - -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![alt text](https://github.com/Steveb1968/script.pseudotv/blob/master/resources/images/Default.png?raw=true "PseudoTV Logo") 2 | 3 | PseudoTV for Kodi 4 | ====== 5 | 6 | [View branch download information.](#branches-guide) 7 | 8 | 9 | ![screenshot](https://github.com/Steveb1968/script.pseudotv/blob/master/resources/screenshots/screenshot-01.png?raw=true) 10 | 11 | ### What is it? 12 | It's channel-surfing for your media center. Never again will you have to actually pick what you want to watch. Use an electronic program guide (EPG) to view what's on or select a show to watch. This script will let you create your own channels and, you know, watch them. Doesn't actually sound useful when I have to write it in a readme. Eh, try it and decide if it works for you. 13 | 14 | --- 15 | ### Requirements 16 | This **ONLY** uses your existing video library to play video. It will **NOT** play video from the internet. If you do not have a significant number of videos in your library, then this script probably isn't for you. Sorry. 17 | 18 | --- 19 | ### Features 20 | 21 | * Automatic channel creation based on your library. 22 | * Optionally customize the channels you want with the channel configuration tool. 23 | * Utilize the Kodi smart playlist editor to create advanced channel setups. 24 | * Use an EPG and view what was on, is on, and will be on. Would you rather see something that will be on later? Select it and watch it now! 25 | * Want to pause a channel while you watch another? And then come back to it and have it be paused still? Sounds like a weird request to me, but if you want to do it you certainly can. It's a feature! 26 | * An idle-timer makes sure you aren't spinning a hard-drive needlessly all night. 27 | * Discover the other features on your own (so that I don't have to list them all...I'm lazy). 28 | 29 | --- 30 | ### Setup 31 | 1. First, install it. This is self-explanatory (hopefully). Really, that's all that is necessary. Default channels will be created without any intervention. You can choose to setup channels (next step) if you wish. 32 | 2. _Instructions to create your own channels:_ Inside of the addon config, you may open the channel configuration tool. Inside of here you can select a channel to modify. You may then select it's type and any options. For a basic setup, that's all you need to do. It's worth noting that you may create a playlist using the smart playlist editor and then select that playlist in the channel config tool (Custom Playlist channel type). Additionally, you may select to add advanced rules to certain channels. There are quite a few rules that are currently available, and hopefully they should be relatively self-explanitory. 33 | 34 | This is a readme and should include descriptions of them all... who knows, maybe it will some day. 35 | 36 | --- 37 | ### Controls 38 | There are only a few things you need to know in order to control everything. First of all, the Stop button ('X') stops the video and exits the script. You may also press the Previous Menu ('Escape\Back') button to do this (don't worry, it will prompt you to verify first). Scroll through channels using the arrow up and down keys, or alternatively by pressing Page up or down. To open the EPG, press the Select key ('Enter'). Move around using the arrow keys. Start a program by pressing Select. Pressing Previous Menu ('Escape\Back') will close the EPG. Press the info key ('I') to display or hide the info window. When it is displayed, you can look at the previous and next shows on this channel using the arrow keys left and right. To access the video osd window press the context menu key ('C\Menu'), to exit the osd press ('Escape\Back'). 39 | 40 | --- 41 | ### Settings 42 | 43 | **General Settings -** 44 | 45 | * **Configure Channels:** This is the channel configuration tool. From here you can modify the settings for each individual channel. 46 | * **Force Channel Reset:** If you want your channels to be reanalyzed then you can turn this on. 47 | * **Auto-off Timer:** The amount of time (in minutes) of idle time before the script is automatically stopped. 48 | * **Time Between Channel Resets:** This is how often your channels will be reset. Generally, this is done automatically based on the duration of the individual channels and how long they've been watched. You can change this to reset every certain time period (day, week, month). 49 | * **Default channel times at startup:** This affects where the channels start playing when the script starts. Resume will pick everything up where it left off. Random will start each channel in a random spot. Real-Time will act like the script was never shut down, and will play things at the time the EPG said they would play. 50 | * **Background Updating:** The script uses multiple threads to keep channels up to date while other channels are playing. In general, this is fine. If your computer is too slow, though, it may cause stuttering in the video playback. This setting allows you to minimize or disable the use of these background threads. 51 | * **Enable Channel Sharing:** Share the same configuration and channel list between multiple computers. If you're using real-time mode (the default) then you can stop watching one show on one computer and pick it up on the other. Or you can have both computers playing the same lists at the same time. 52 | * **Shared Channels Folder:** If channel sharing is enabled, this is the location available from both computers that will keep the settings and channel information. 53 | 54 | 55 | **Visual Settings -** 56 | 57 | * **Info when Changing Channels:** Shows the current media information when changing channels. The duration of the info can be set in the sub-setting "Changing channel info duration". 58 | * **Always show channel watermark:** Always display the current channel logo watermark. The position of the logo can be adjusted via the sub-setting "Set watermark position" (upper left, upper right, lower right, lower left). 59 | * **Hide year and episode information:** Removes the year (movies) and SxEP (episodes). A force channel reset is needed for the setting to take effect. 60 | * **Always show channel logo in epg grid:** Shows the channel logo's in the epg grid. 61 | * **Channel Logo Folder:** The place where channel logos are stored. 62 | * **Clock Display:** Select between a 12-hour or 24-hour clock in the EPG. 63 | * **Show Coming Up Next box:** A little box will notify you of what's coming up next when the current show is nearly finished. 64 | * **Hide very short videos:** Don't show clips shorter than the "Duration of Short videos" setting. Effects the EPG, coming up next box and the info box. This is helpful if you use bumpers or commercials. 65 | 66 | 67 | **Tweaks -** 68 | 69 | * **Playlist Media Limit:** Limit the playlist items in a channel generated by pseudotv. Smaller values will result in quicker load/rebuild times. 70 | * **OSD Channel Number Color:** Change the color of the channel number located at the top left, seen when changing channels and on startup. 71 | * **Seek step forward:** Option to adjust the seek step forward (right arrow key in fullscreen video). Options include 10 sec,30 sec,60 sec,3 min,5 min,10 min,30 min. 72 | * **Seek step backward:** Option to adjust the seek step backward (left arrow key in fullscreen video). Options include -10 sec,-30 sec,-60 sec,-3 min,-5 min,-10 min,-30 min. 73 | * **Reset Watched Status:** Option to reset watched status and resume points of videos while watching PseudoTV. 74 | 75 | 76 | **Auto Start -** 77 | 78 | * **Activate Service:** Activate auto start. Pseudotv will automatically start when kodi is started. 79 | * **Service Delay:** Delay the auto start of Pseudotv at Kodi start-up. This is useful for low end hardware or if your skin loads multi-pal scripts at start-up. 80 | * **Show Notification:** Self explanatory I hope. Will show a notification of Pseudotv's attempt to auto-start. 81 | 82 | --- 83 | ### Addon boolean condition 84 | 85 | **‹visible›String.IsEmpty(Window(home).Property(PseudoTVRunning))‹/visible›** 86 | Useful for hiding skin xml files such as DialogBusy.xml/DialogSeekBar.xml 87 | 88 | **Tip: DialogSeekBar.xml** 89 | Replace *"Player.DisplayAfterSeek"* with 90 | *"[Player.DisplayAfterSeek\+String.IsEmpty(Window(home).Property(PseudoTVRunning))]"* 91 | 92 | --- 93 | ### Branches guide 94 | 95 | * **Master branch:** Suitable for Kodi VER:18 and above. 96 | * **Leia branch:** Suitable for Kodi VER:18. 97 | * **Krypton branch:** Suitable for Kodi VER:17 and below. 98 | 99 | --- 100 | ### Credits 101 | 102 | **Developer:** Jason102, Steveb.
103 | **Code Additions:** Sranshaft, TheOddLinguist, Canuma, rafaelvieiras, fnord12.
104 | **Skins:** Sranshaft, Zepfan, Steveb.
105 | **Preset Images:** Jtucker1972.
106 | **Languages:** CyberXaz, Machine-Sanctum, rafaelvieiras, Eng2Heb. -------------------------------------------------------------------------------- /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/Steveb1968/script.pseudotv 18 | https://github.com/Steveb1968/script.pseudotv 19 | GNU GENERAL PUBLIC LICENSE Version 3 20 | 21 | Added option to enable/disable channel logo's in the epg grid.[CR]New Default Skin (Estuary based).[CR]Added default font. 22 | 23 | icon.png 24 | fanart.jpg 25 | resources/screenshots/screenshot-01.png 26 | resources/screenshots/screenshot-02.png 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | 2.4.5 (steveb) 2 | Hebrew translation. Thanks 'Eng2Heb' 3 | Added year for movie info. 4 | 5 | 2.4.4 (steveb) 6 | Added option to enable/disable channel logo's in the epg grid. 7 | New Default Skin (Estuary based). 8 | Added default font. 9 | 10 | 2.4.3 (steveb) 11 | Check for playing media. 12 | Improve timebar position. 13 | Code cleanup. 14 | Cleanup DialogProgress 15 | 16 | 2.4.2 (steveb) 17 | Jarvis code cleanup 18 | 19 | 2.4.1 (steveb) 20 | Added option to set seek times forward/backward (Isengard & above). 21 | Code cleanup. 22 | 23 | 2.4.0 (steveb) 24 | Helix support. 25 | 26 | 2.3.0 (steveb) 27 | Automatic conversion of colour channel logo's to grey-scale for channel bug. 28 | 29 | 2.2.0 (steveb) 30 | Gotham Support. 31 | Code Cleanup. 32 | Localize Strings. 33 | Changed max mu3 string length from 4096(512 bytes) to 16384(2048 bytes). 34 | 35 | 2.1.0 36 | New rule: reset every x days 37 | Update to Night skin (thanks Steveb). 38 | Better exception handling. 39 | Change 'short clip' length. 40 | Include IceLibrary streams. 41 | Configuration bug fixes. 42 | Addition of Metropolis skin (thanks Steveb). 43 | Updates to skins (thanks again Steveb). 44 | Fix for color truncation (thanks Josebiro). 45 | Fix for missing texture (thanks lambda81). 46 | Hide channel bug when changing channel. 47 | Properly detect already running. 48 | Option to include the season / episode in the show title. 49 | 50 | 2.0.0 51 | New advanced channel rule system. 52 | Share channels between multiple systems. 53 | Addition of Dutch language (thanks Machine-Sanctum). 54 | Support for MOV file parsing. 55 | Multiple thread deletion issues fixed. 56 | Background channel loading. 57 | EPG bugs fixed. 58 | Support for directory-type channels. 59 | Select mode for background channel thread. 60 | EPG drawing optimization. 61 | Select between 12-hour and 24-hour clock. 62 | Better channel creation for first-time users. 63 | Much better time accuracy between restarts. 64 | Added Xeebo skin (thanks Steveb). 65 | 66 | 1.2.1 67 | Now ask the user to enable the webserver if it isn't on. 68 | Fix to use the proper webserver port. 69 | Update to the Night skin (thanks Steveb). 70 | Added the Simplicity skin (thanks Zepfan). 71 | Several small performance improvements. 72 | Shift 30 seconds forward or backward by using the left and right arrow keys. 73 | Many random fixes. 74 | 75 | 1.2.0 76 | The user can now specify how channels start: resume, follow the EPG (real- 77 | time), or random. 78 | Background updating of channels. 79 | Fixed issues when used in Eden. 80 | No longer sometimes crashes on exit. 81 | Turns off repeat when exiting. 82 | Added Spanish translation (thanks CyberXaz). 83 | Updated the Night skin (thanks Steveb). 84 | 85 | 1.1.0 86 | Added the channel configuration utility. 87 | Fixed a potential crash in the mp4 parser. 88 | Separated the channel creation code into a different module. 89 | Changed a few of the configuration strings. 90 | Added the ability to refresh channels on every start. 91 | Improved the channel changing speed. 92 | Resume a channel at the proper time when switching between channels. 93 | Allow the user to specify a directory for channel logos. 94 | Allow the use of the OSD. 95 | Added an FLV parser. 96 | New skins from Zepfan. 97 | Fixed a problem with shows not being resumed properly from the EPG. 98 | Gave skinners the ability to change the EPG button text color. 99 | Updates to nearly all skins (thanks Zepfan and Sranshaft). 100 | 101 | 1.0.1 102 | Able to use the Previous Menu key to exit. 103 | Update to the Refocus skin from Sranshaft. 104 | 105 | 1.0.0 106 | Crazy jump in version to 1.0 because I can. 107 | Turn off shuffling if it's on. 108 | Playlist parsing is completely minidom now. 109 | Manually shuffle playlists when the order is random. 110 | Allow the stop button inside of the 2 second window. 111 | Added the Confluence skin (thanks Sranshaft). 112 | Added the Transparency skin (thanks Zepfan). 113 | Now have channel icons for most presets (thanks jtucker1972). 114 | Fixed an uncaught exception in video parsers. 115 | Works if onClick isn't called in the EPG. 116 | 117 | 0.2.0 118 | New default skin (thanks to Sranshaft) 119 | Added an info window (again, Sranshaft). 120 | There is now a PseudoTV icon (thanks bridgman). 121 | Channel icons. 122 | Control over button placement put into the skin. 123 | Start the script on the previously viewed channel. 124 | EPG speed improvement. 125 | Support mixed playlists. 126 | Support for future JSON modification. 127 | 128 | 0.1.5 129 | Resolved the problem with not resuming the channel properly. 130 | Fixed the issue introduced in 0.1.4 that prevending gathering information 131 | on Windows systems. 132 | Put several of the controls into the hands of the skinners. 133 | 134 | 0.1.4 135 | New method of scanning channels (thanks to TheOddLinguist) that correctly 136 | uses movie sets and TV show-type playlists. 137 | Display music video information in the EPG. 138 | 139 | 0.1.3 140 | There was an issue where XBMC woukd sometimes return a float when an int 141 | was expected, resulting in a type error and a freeze. 142 | Sometimes the EPG wouldn't properly select or display the correct show. 143 | The EPG would sometimes stop scrolling. 144 | Changed the EPG to left-shift the time offsets. 145 | 146 | 0.1.2 147 | Windows systems experienced freezes...but no more! 148 | There was also an issue getting the duration of an episode. 149 | 150 | 0.1.1 151 | Fixed a freeze when there are unexpected things in the smart playlist. 152 | 153 | 0.1.0 (Initial alpha version) 154 | -------------------------------------------------------------------------------- /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 sys 23 | import os 24 | 25 | ADDON = xbmcaddon.Addon() 26 | ADDON_ID = ADDON.getAddonInfo('id') 27 | CWD = ADDON.getAddonInfo('path').decode("utf-8") 28 | RESOURCE = xbmc.translatePath(os.path.join(CWD, 'resources', 'lib').encode("utf-8")).decode("utf-8") 29 | 30 | sys.path.append(RESOURCE) 31 | 32 | SkinID = xbmc.getSkinDir() 33 | if SkinID != 'skin.estuary': 34 | import MyFont 35 | if MyFont.getSkinRes() == '1080i': 36 | MyFont.addFont("PseudoTv10", "NotoSans-Regular.ttf", "23") 37 | MyFont.addFont("PseudoTv12", "NotoSans-Regular.ttf", "25") 38 | MyFont.addFont("PseudoTv13", "NotoSans-Regular.ttf", "30") 39 | MyFont.addFont("PseudoTv14", "NotoSans-Regular.ttf", "32") 40 | else: 41 | MyFont.addFont("PseudoTv10", "NotoSans-Regular.ttf", "14") 42 | MyFont.addFont("PseudoTv12", "NotoSans-Regular.ttf", "16") 43 | MyFont.addFont("PseudoTv13", "NotoSans-Regular.ttf", "20") 44 | MyFont.addFont("PseudoTv14", "NotoSans-Regular.ttf", "22") 45 | 46 | def Start(): 47 | if xbmc.Player().isPlaying(): 48 | xbmc.Player().stop() 49 | import Overlay as Overlay 50 | MyOverlayWindow = Overlay.TVOverlay("script.pseudotv.TVOverlay.xml", CWD, "default") 51 | del MyOverlayWindow 52 | xbmcgui.Window(10000).setProperty("PseudoTVRunning", '') 53 | 54 | if xbmcgui.Window(10000).getProperty("PseudoTVRunning") != "True": 55 | xbmcgui.Window(10000).setProperty("PseudoTVRunning", "True") 56 | shouldrestart = False 57 | if shouldrestart == False: 58 | Start() 59 | else: 60 | xbmc.log('script.PseudoTV - Already running, exiting', xbmc.LOGERROR) 61 | -------------------------------------------------------------------------------- /fanart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/fanart.jpg -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/icon.png -------------------------------------------------------------------------------- /resources/fonts/NotoSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/fonts/NotoSans-Regular.ttf -------------------------------------------------------------------------------- /resources/images/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/Default.png -------------------------------------------------------------------------------- /resources/images/Default2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/Default2.png -------------------------------------------------------------------------------- /resources/images/label_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_0.png -------------------------------------------------------------------------------- /resources/images/label_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_1.png -------------------------------------------------------------------------------- /resources/images/label_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_2.png -------------------------------------------------------------------------------- /resources/images/label_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_3.png -------------------------------------------------------------------------------- /resources/images/label_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_4.png -------------------------------------------------------------------------------- /resources/images/label_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_5.png -------------------------------------------------------------------------------- /resources/images/label_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_6.png -------------------------------------------------------------------------------- /resources/images/label_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_7.png -------------------------------------------------------------------------------- /resources/images/label_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_8.png -------------------------------------------------------------------------------- /resources/images/label_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/images/label_9.png -------------------------------------------------------------------------------- /resources/language/resource.language.he_il/strings.po: -------------------------------------------------------------------------------- 1 | # XBMC Media Center language file 2 | # Addon Name: PseudoTV 3 | # Addon id: script.pseudotv 4 | # Addon version: 2.4.5 5 | # Addon Provider: Jason Anderson | Steveb 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: script.pseudotv\n" 9 | "Report-Msgid-Bugs-To: alanwww1@xbmc.org\n" 10 | "POT-Creation-Date: 2014-03-08 04:23+0000\n" 11 | "PO-Revision-Date: 2017-10-11 11:33+0300\n" 12 | "Last-Translator: A. Dambledore\n" 13 | "Language-Team: Eng2Heb\n" 14 | "Language: he_IL\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | 21 | msgctxt "Addon Summary" 22 | msgid "Channel surfing for your video library" 23 | msgstr "גלישה בערוץ עבור ספריית הווידאו שלך" 24 | 25 | msgctxt "Addon Description" 26 | msgid "PseudoTV acts similar to normal broadcast or cable TV, complete with multiple preset and user-defined channels and an EPG." 27 | msgstr "פעולות PseudoTV דומות לשידור רגיל או לטלוויזיה בכבלים, עם ערוצים מוגדרים מראש מוגדרים מראש ומדריך שידורים." 28 | 29 | msgctxt "#30000" 30 | msgid "General" 31 | msgstr "כללי" 32 | 33 | msgctxt "#30001" 34 | msgid "Auto-off Timer" 35 | msgstr "כיבוי על ידי שעון עצר" 36 | 37 | msgctxt "#30002" 38 | msgid "Force channel reset on next start" 39 | msgstr "כפה איפוס ערוץ באיתחול הבא" 40 | 41 | msgctxt "#30003" 42 | msgid "Show info when changing channels" 43 | msgstr "הצג מידע בעת החלפת ערוצים" 44 | 45 | msgctxt "#30004" 46 | msgid "Time between channel resets" 47 | msgstr "פרק הזמן בין ערוץ איפוס" 48 | 49 | msgctxt "#30005" 50 | msgid "Coming Up Next" 51 | msgstr "השידור הבא" 52 | 53 | msgctxt "#30006" 54 | msgid "Always show channel watermark" 55 | msgstr "הצג תמיד את סימול הערוץ" 56 | 57 | msgctxt "#30007" 58 | msgid "Show channel logo in epg grid" 59 | msgstr "הצג סמל ערוץ ברשת מדריך השידורים" 60 | 61 | msgctxt "#30008" 62 | msgid "Open Channel Configuration" 63 | msgstr "פתח את הגדרות הערוץ" 64 | 65 | # empty string with id 30009 66 | msgctxt "#30010" 67 | msgid "Channel Logo Folder" 68 | msgstr "תיקיית סמלי הערוץ" 69 | 70 | msgctxt "#30011" 71 | msgid "Default channel times at startup" 72 | msgstr "ברירת מחדל לזמני ערוץ באיתחול" 73 | 74 | msgctxt "#30012" 75 | msgid "Background Updating" 76 | msgstr "עדכון ברקע" 77 | 78 | msgctxt "#30013" 79 | msgid "Shared Channels Folder" 80 | msgstr "תיקיית ערוצים משותפים" 81 | 82 | msgctxt "#30014" 83 | msgid "Clock Display" 84 | msgstr "תצוגת שעון" 85 | 86 | msgctxt "#30015" 87 | msgid "Enable Channel Sharing" 88 | msgstr "אפשר שיתוף ערוץ" 89 | 90 | msgctxt "#30016" 91 | msgid "Show Coming Up Next box" 92 | msgstr "הצג תיבת השידור הבא" 93 | 94 | msgctxt "#30017" 95 | msgid "Hide very short videos" 96 | msgstr "הסתר קטעי וידאו קצרים מאוד" 97 | 98 | msgctxt "#30018" 99 | msgid "Duration of \"short\" videos" 100 | msgstr "משך הזמן של סרטוני וידאו קצרים" 101 | 102 | msgctxt "#30019" 103 | msgid "Would you like to save your changes?" 104 | msgstr "האם ברצונך לשמור את השינויים?" 105 | 106 | msgctxt "#30020" 107 | msgid "Visuals" 108 | msgstr "חזותי" 109 | 110 | msgctxt "#30021" 111 | msgid "Show Season/Episode number" 112 | msgstr "הצג מספר עונה או פרק" 113 | 114 | msgctxt "#30022" 115 | msgid "Tweaks" 116 | msgstr "שינויים" 117 | 118 | # empty string with id 30023 119 | msgctxt "#30024" 120 | msgid "Background Loading..." 121 | msgstr "טעינה ברקע..." 122 | 123 | msgctxt "#30025" 124 | msgid "Added" 125 | msgstr "נוסף" 126 | 127 | msgctxt "#30026" 128 | msgid "Auto Start" 129 | msgstr "הפעלה אוטומטית" 130 | 131 | msgctxt "#30027" 132 | msgid "Activate Service" 133 | msgstr "הפעל את השירות" 134 | 135 | msgctxt "#30028" 136 | msgid "Service Delay" 137 | msgstr "השהיית שירות" 138 | 139 | msgctxt "#30029" 140 | msgid "Show Notification" 141 | msgstr "הצג הודעה" 142 | 143 | msgctxt "#30030" 144 | msgid "Service Starting..." 145 | msgstr "השירות מתחיל..." 146 | 147 | msgctxt "#30031" 148 | msgid "Are you sure you want to exit PseudoTV?" 149 | msgstr "האם אתה בטוח שברצונך לצאת מ-PseudoTV?" 150 | 151 | msgctxt "#30032" 152 | msgid "Do you want to save all changes?" 153 | msgstr "האם ברצונך לשמור את כל השינויים?" 154 | 155 | msgctxt "#30033" 156 | msgid "Are you sure you want to clear this channel?" 157 | msgstr "האם אתה בטוח שברצונך לאפס את הערוץ הזה?" 158 | 159 | msgctxt "#30034" 160 | msgid "Unable to open the cache file" 161 | msgstr "אין אפשרות לפתוח את קובץ המטמון" 162 | 163 | msgctxt "#30035" 164 | msgid "Unable to create the cache directory" 165 | msgstr "אין אפשרות ליצור את ספריית מטמון" 166 | 167 | msgctxt "#30036" 168 | msgid "Unable to create the storage directory" 169 | msgstr "אין אפשרות ליצור את ספריית אחסון" 170 | 171 | msgctxt "#30037" 172 | msgid "Unable to find any channels. Please configure the addon." 173 | msgstr "אין אפשרות לאתר ערוצים. אנא הגדר ההרחבה." 174 | 175 | msgctxt "#30038" 176 | msgid "Unable to populate channels. Please verify that you have scraped media in your library and that you have properly configured channels." 177 | msgstr "לא ניתן לאכלס ערוצים. נא ודא כי יש לך מדיה תואמת בספריה שלך ושהגדרת כראוי את הערוצים." 178 | 179 | msgctxt "#30039" 180 | msgid "Exceeded 3 invalidated channels. Exiting." 181 | msgstr "חריגה מ 3 ערוצים לא חוקיים. יציאה." 182 | 183 | msgctxt "#30040" 184 | msgid "No channels available. Exiting." 185 | msgstr "אין ערוצים זמינים. יציאה." 186 | 187 | msgctxt "#30041" 188 | msgid "Coming Up" 189 | msgstr "השידור הבא" 190 | 191 | msgctxt "#30042" 192 | msgid "Already Seen" 193 | msgstr "כבר נצפה" 194 | 195 | msgctxt "#30043" 196 | msgid "Now Playing" 197 | msgstr "מנגן כעת" 198 | 199 | msgctxt "#30044" 200 | msgid "Playlist Media Limit" 201 | msgstr "מגבלת רשימת ניגון מדיה" 202 | 203 | msgctxt "#30045" 204 | msgid "OSD Channel Number Colour" 205 | msgstr "צבע מספר ערוץ הוידאו OSD" 206 | 207 | msgctxt "#30046" 208 | msgid "Seek step forward" 209 | msgstr "מחפש צעד קדימה" 210 | 211 | msgctxt "#30047" 212 | msgid "Seek step backward" 213 | msgstr "מחפש צעד אחורה" 214 | 215 | msgctxt "#30190" 216 | msgid "Reset Watched Status" 217 | msgstr "אפס סטטוס נצפה" 218 | -------------------------------------------------------------------------------- /resources/lib/AVIParser.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 AVIChunk: 28 | def __init__(self): 29 | self.empty() 30 | 31 | 32 | def empty(self): 33 | self.size = 0 34 | self.fourcc = '' 35 | self.datatype = 1 36 | self.chunk = '' 37 | 38 | 39 | def read(self, thefile): 40 | data = thefile.read(4) 41 | 42 | try: 43 | self.size = struct.unpack(' 0 and self.size < 10000: 49 | self.chunk = thefile.read(self.size) 50 | else: 51 | self.chunk = '' 52 | self.size = 0 53 | 54 | 55 | 56 | class AVIList: 57 | def __init__(self): 58 | self.empty() 59 | 60 | 61 | def empty(self): 62 | self.size = 0 63 | self.fourcc = '' 64 | self.datatype = 2 65 | 66 | 67 | def read(self, thefile): 68 | data = thefile.read(4) 69 | 70 | try: 71 | self.size = struct.unpack(' 10: 177 | self.Header.dwStreams = 10 178 | 179 | for i in range(self.Header.dwStreams): 180 | if data.datatype != 2: 181 | self.log("Unable to find streams") 182 | return 0 183 | 184 | listsize = data.size 185 | # Stream chunk number 1, the stream header 186 | data = self.getChunkOrList() 187 | 188 | if data.datatype != 1: 189 | self.log("Broken stream header") 190 | return 0 191 | 192 | self.StreamHeader.empty() 193 | self.parseStreamHeader(data) 194 | 195 | # If this is the video header, determine the duration 196 | if self.StreamHeader.fccType == 'vids': 197 | return self.getStreamDuration() 198 | 199 | # If this isn't the video header, skip through the rest of these 200 | # stream chunks 201 | try: 202 | if listsize - data.size - 12 > 0: 203 | self.File.seek(listsize - data.size - 12, 1) 204 | 205 | data = self.getChunkOrList() 206 | except: 207 | self.log("Unable to seek") 208 | 209 | self.log("Video stream not found") 210 | return 0 211 | 212 | 213 | def getStreamDuration(self): 214 | try: 215 | return int(self.StreamHeader.dwLength / (float(self.StreamHeader.dwRate) / float(self.StreamHeader.dwScale))) 216 | except: 217 | return 0 218 | 219 | 220 | def parseHeader(self, data): 221 | try: 222 | header = struct.unpack('. 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 | ADDON = xbmcaddon.Addon(id='script.pseudotv') 26 | ADDON_ID = ADDON.getAddonInfo('id') 27 | ADDON_NAME = ADDON.getAddonInfo('name') 28 | LANGUAGE = ADDON.getLocalizedString 29 | CWD = ADDON.getAddonInfo('path').decode("utf-8") 30 | VERSION = ADDON.getAddonInfo('version') 31 | ICON = ADDON.getAddonInfo('icon') 32 | 33 | def log(msg, level = xbmc.LOGDEBUG): 34 | try: 35 | xbmc.log(ADDON_ID + '-' + ascii(msg), level) 36 | except: 37 | pass 38 | 39 | 40 | def uni(string, encoding = 'utf-8'): 41 | if isinstance(string, basestring): 42 | if not isinstance(string, unicode): 43 | string = unicode(string, encoding) 44 | 45 | return string 46 | 47 | def ascii(string): 48 | if isinstance(string, basestring): 49 | if isinstance(string, unicode): 50 | string = string.encode('ascii', 'ignore') 51 | 52 | return string 53 | 54 | 55 | TIMEOUT = 15 * 1000 56 | PREP_CHANNEL_TIME = 60 * 60 * 24 * 5 57 | NOTIFICATION_CHECK_TIME = 5 58 | NOTIFICATION_TIME_BEFORE_END = 90 59 | NOTIFICATION_DISPLAY_TIME = 8 60 | 61 | MODE_RESUME = 1 62 | MODE_ALWAYSPAUSE = 2 63 | MODE_ORDERAIRDATE = 4 64 | MODE_RANDOM = 8 65 | MODE_REALTIME = 16 66 | MODE_STARTMODES = MODE_RANDOM | MODE_REALTIME | MODE_RESUME 67 | 68 | SETTINGS_LOC = ADDON.getAddonInfo('profile').decode("utf-8") 69 | CHANNEL_SHARING = False 70 | LOCK_LOC = xbmc.translatePath(os.path.join(SETTINGS_LOC, 'cache' + '/')) 71 | 72 | if ADDON.getSetting('ChannelSharing') == "true": 73 | CHANNEL_SHARING = True 74 | LOCK_LOC = xbmc.translatePath(os.path.join(ADDON.getSetting('SettingsFolder'), 'cache' + '/')) 75 | 76 | IMAGES_LOC = xbmc.translatePath(os.path.join(CWD, 'resources', 'images' + '/')) 77 | LOGOS_LOC = xbmc.translatePath(os.path.join(CWD, 'resources', 'logos' + '/')) 78 | CHANNELS_LOC = os.path.join(SETTINGS_LOC, 'cache' + '/') 79 | GEN_CHAN_LOC = os.path.join(CHANNELS_LOC, 'generated' + '/') 80 | MADE_CHAN_LOC = os.path.join(CHANNELS_LOC, 'stored' + '/') 81 | CHANNELBUG_LOC = xbmc.translatePath(os.path.join(CHANNELS_LOC, 'ChannelBug' + '/')) 82 | 83 | CHANNELBUG_POS =[[19,19],[1695,19],[1695,952],[19,952]] 84 | 85 | SHORT_CLIP_ENUM = [15, 30, 60, 90, 120, 180, 240, 300, 360] 86 | INFO_DUR = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 87 | SEEK_FORWARD = [10, 30, 60, 180, 300, 600, 1800] 88 | SEEK_BACKWARD = [-10, -30, -60, -180, -300, -600, -1800] 89 | MEDIA_LIMIT = [10, 25, 50, 100, 250, 500, 1000, 0] 90 | NUM_COLOUR = ['0xFFFF0000', '0xFF00FF00', '0xFF0000FF', '0xFFFFFF00', '0xFF00FFFF', '0xFFFFA500', '0xFFFF00FF', '0xFF808080', '0xFFFFFFFF'] 91 | 92 | GlobalFileLock = FileLock() 93 | ADDON_SETTINGS = Settings.Settings() 94 | 95 | TIME_BAR = 'pstvTimeBar.png' 96 | BUTTON_NO_FOCUS = 'pstvButtonNoFocus.png' 97 | BUTTON_FOCUS = 'pstvButtonFocus.png' 98 | 99 | RULES_ACTION_START = 1 100 | RULES_ACTION_JSON = 2 101 | RULES_ACTION_LIST = 4 102 | RULES_ACTION_BEFORE_CLEAR = 8 103 | RULES_ACTION_BEFORE_TIME = 16 104 | RULES_ACTION_FINAL_MADE = 32 105 | RULES_ACTION_FINAL_LOADED = 64 106 | RULES_ACTION_OVERLAY_SET_CHANNEL = 128 107 | RULES_ACTION_OVERLAY_SET_CHANNEL_END = 256 108 | 109 | # Maximum is 10 for this 110 | RULES_PER_PAGE = 7 111 | 112 | ACTION_MOVE_LEFT = 1 113 | ACTION_MOVE_RIGHT = 2 114 | ACTION_MOVE_UP = 3 115 | ACTION_MOVE_DOWN = 4 116 | ACTION_PAGEUP = 5 117 | ACTION_PAGEDOWN = 6 118 | ACTION_SELECT_ITEM = 7 119 | ACTION_SELECT_ITEM2 = 100 #Mouse Left Click 120 | ACTION_PREVIOUS_MENU = (9, 10, 92, 216, 247, 257, 275, 61467, 61448,) 121 | ACTION_SHOW_INFO = 11 122 | ACTION_STOP = 13 123 | ACTION_OSD = 117 124 | ACTION_NUMBER_0 = 58 125 | ACTION_NUMBER_9 = 67 126 | ACTION_INVALID = 999 127 | ACTION_MOUSE_RIGHT_CLICK = 101 #Mouse Right Click 128 | CONTEXT_MENU = 117 129 | -------------------------------------------------------------------------------- /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 = xbmc.translatePath('special://skin') 10 | ScriptPath = xbmc.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.XMLTreeBuilder): 15 | def __init__(self): 16 | ET.XMLTreeBuilder.__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: ' + ascii(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 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 = xbmc.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 MP4Parser as MP4Parser 24 | import AVIParser as AVIParser 25 | import MKVParser as MKVParser 26 | import FLVParser as FLVParser 27 | import TSParser as TSParser 28 | 29 | from Globals import * 30 | from FileAccess import FileAccess 31 | 32 | 33 | 34 | class VideoParser: 35 | def __init__(self): 36 | self.AVIExts = ['.avi'] 37 | self.MP4Exts = ['.mp4', '.m4v', '.3gp', '.3g2', '.f4v', '.mov'] 38 | self.MKVExts = ['.mkv'] 39 | self.FLVExts = ['.flv'] 40 | self.TSExts = ['.ts', '.m2ts'] 41 | 42 | 43 | def log(self, msg, level = xbmc.LOGDEBUG): 44 | log('VideoParser: ' + msg, level) 45 | 46 | 47 | def getVideoLength(self, filename): 48 | self.log("getVideoLength " + filename) 49 | 50 | if len(filename) == 0: 51 | self.log("No file name specified") 52 | return 0 53 | 54 | if FileAccess.exists(filename) == False: 55 | self.log("Unable to find the file") 56 | return 0 57 | 58 | base, ext = os.path.splitext(filename) 59 | ext = ext.lower() 60 | 61 | if ext in self.AVIExts: 62 | self.parser = AVIParser.AVIParser() 63 | elif ext in self.MP4Exts: 64 | self.parser = MP4Parser.MP4Parser() 65 | elif ext in self.MKVExts: 66 | self.parser = MKVParser.MKVParser() 67 | elif ext in self.FLVExts: 68 | self.parser = FLVParser.FLVParser() 69 | elif ext in self.TSExts: 70 | self.parser = TSParser.TSParser() 71 | else: 72 | self.log("No parser found for extension " + ext) 73 | return 0 74 | 75 | return self.parser.determineLength(filename) 76 | -------------------------------------------------------------------------------- /resources/logos/A&E.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/A&E.png -------------------------------------------------------------------------------- /resources/logos/ABC (US).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/ABC (US).png -------------------------------------------------------------------------------- /resources/logos/ABC Family.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/ABC Family.png -------------------------------------------------------------------------------- /resources/logos/ABC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/ABC.png -------------------------------------------------------------------------------- /resources/logos/AMC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/AMC.png -------------------------------------------------------------------------------- /resources/logos/ARD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/ARD.png -------------------------------------------------------------------------------- /resources/logos/AXN Beyond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/AXN Beyond.png -------------------------------------------------------------------------------- /resources/logos/AXN SciFi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/AXN SciFi.png -------------------------------------------------------------------------------- /resources/logos/Action Max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Action Max.png -------------------------------------------------------------------------------- /resources/logos/Action TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Action TV.png -------------------------------------------------------------------------------- /resources/logos/Action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Action.png -------------------------------------------------------------------------------- /resources/logos/Adult Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Adult Movies.png -------------------------------------------------------------------------------- /resources/logos/Adventure Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Adventure Movies.png -------------------------------------------------------------------------------- /resources/logos/Adventure TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Adventure TV.png -------------------------------------------------------------------------------- /resources/logos/Adventure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Adventure.png -------------------------------------------------------------------------------- /resources/logos/Amazon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Amazon.png -------------------------------------------------------------------------------- /resources/logos/Animal Planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Animal Planet.png -------------------------------------------------------------------------------- /resources/logos/Animation Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Animation Movies.png -------------------------------------------------------------------------------- /resources/logos/Animax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Animax.png -------------------------------------------------------------------------------- /resources/logos/BBC Four.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/BBC Four.png -------------------------------------------------------------------------------- /resources/logos/BBC HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/BBC HD.png -------------------------------------------------------------------------------- /resources/logos/BBC Knowledge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/BBC Knowledge.png -------------------------------------------------------------------------------- /resources/logos/BBC Three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/BBC Three.png -------------------------------------------------------------------------------- /resources/logos/BBC Two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/BBC Two.png -------------------------------------------------------------------------------- /resources/logos/BET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/BET.png -------------------------------------------------------------------------------- /resources/logos/Biography Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Biography Movies.png -------------------------------------------------------------------------------- /resources/logos/Biography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Biography.png -------------------------------------------------------------------------------- /resources/logos/Boomerang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Boomerang.png -------------------------------------------------------------------------------- /resources/logos/CBC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/CBC.png -------------------------------------------------------------------------------- /resources/logos/CN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/CN.png -------------------------------------------------------------------------------- /resources/logos/CTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/CTV.png -------------------------------------------------------------------------------- /resources/logos/Canal+ Drama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Canal+ Drama.png -------------------------------------------------------------------------------- /resources/logos/Cartoon Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Cartoon Network.png -------------------------------------------------------------------------------- /resources/logos/Channel 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Channel 4.png -------------------------------------------------------------------------------- /resources/logos/Children TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Children TV.png -------------------------------------------------------------------------------- /resources/logos/Chiller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Chiller.png -------------------------------------------------------------------------------- /resources/logos/Cine FX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Cine FX.png -------------------------------------------------------------------------------- /resources/logos/Cine First.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Cine First.png -------------------------------------------------------------------------------- /resources/logos/Cinemax HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Cinemax HD.png -------------------------------------------------------------------------------- /resources/logos/Cinemax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Cinemax.png -------------------------------------------------------------------------------- /resources/logos/City TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/City TV.png -------------------------------------------------------------------------------- /resources/logos/Comedy Central.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Comedy Central.png -------------------------------------------------------------------------------- /resources/logos/Comedy Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Comedy Movies.png -------------------------------------------------------------------------------- /resources/logos/Comedy TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Comedy TV.png -------------------------------------------------------------------------------- /resources/logos/Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Comedy.png -------------------------------------------------------------------------------- /resources/logos/Concert Live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Concert Live.png -------------------------------------------------------------------------------- /resources/logos/Crime Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Crime Movies.png -------------------------------------------------------------------------------- /resources/logos/Crime TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Crime TV.png -------------------------------------------------------------------------------- /resources/logos/Crime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Crime.png -------------------------------------------------------------------------------- /resources/logos/DC Comics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/DC Comics.png -------------------------------------------------------------------------------- /resources/logos/DJs from Mars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/DJs from Mars.png -------------------------------------------------------------------------------- /resources/logos/Discovery HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Discovery HD.png -------------------------------------------------------------------------------- /resources/logos/Discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Discovery.png -------------------------------------------------------------------------------- /resources/logos/Disney Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Disney Channel.png -------------------------------------------------------------------------------- /resources/logos/Disney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Disney.png -------------------------------------------------------------------------------- /resources/logos/Documentary Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Documentary Movies.png -------------------------------------------------------------------------------- /resources/logos/Documentary TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Documentary TV.png -------------------------------------------------------------------------------- /resources/logos/Documentary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Documentary.png -------------------------------------------------------------------------------- /resources/logos/Drama Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Drama Movies.png -------------------------------------------------------------------------------- /resources/logos/Drama TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Drama TV.png -------------------------------------------------------------------------------- /resources/logos/Drama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Drama.png -------------------------------------------------------------------------------- /resources/logos/Dreamworks SKG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Dreamworks SKG.png -------------------------------------------------------------------------------- /resources/logos/E!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/E!.png -------------------------------------------------------------------------------- /resources/logos/Encore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Encore.png -------------------------------------------------------------------------------- /resources/logos/Energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Energy.png -------------------------------------------------------------------------------- /resources/logos/FOX (US).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/FOX (US).png -------------------------------------------------------------------------------- /resources/logos/FOX Life.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/FOX Life.png -------------------------------------------------------------------------------- /resources/logos/FOX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/FOX.png -------------------------------------------------------------------------------- /resources/logos/FX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/FX.png -------------------------------------------------------------------------------- /resources/logos/Family Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Family Movies.png -------------------------------------------------------------------------------- /resources/logos/Fantasy Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Fantasy Movies.png -------------------------------------------------------------------------------- /resources/logos/Fantasy TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Fantasy TV.png -------------------------------------------------------------------------------- /resources/logos/Fantasy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Fantasy.png -------------------------------------------------------------------------------- /resources/logos/FitTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/FitTV.png -------------------------------------------------------------------------------- /resources/logos/Five.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Five.png -------------------------------------------------------------------------------- /resources/logos/Food Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Food Network.png -------------------------------------------------------------------------------- /resources/logos/Fox Kids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Fox Kids.png -------------------------------------------------------------------------------- /resources/logos/Frisbee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Frisbee.png -------------------------------------------------------------------------------- /resources/logos/G4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/G4.png -------------------------------------------------------------------------------- /resources/logos/GTtv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/GTtv.png -------------------------------------------------------------------------------- /resources/logos/Global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Global.png -------------------------------------------------------------------------------- /resources/logos/Grenade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Grenade.png -------------------------------------------------------------------------------- /resources/logos/HBO Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/HBO Comedy.png -------------------------------------------------------------------------------- /resources/logos/HBO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/HBO.png -------------------------------------------------------------------------------- /resources/logos/Historical Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Historical Movies.png -------------------------------------------------------------------------------- /resources/logos/History HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/History HD.png -------------------------------------------------------------------------------- /resources/logos/History.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/History.png -------------------------------------------------------------------------------- /resources/logos/Horror Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Horror Movies.png -------------------------------------------------------------------------------- /resources/logos/Horror TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Horror TV.png -------------------------------------------------------------------------------- /resources/logos/Horror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Horror.png -------------------------------------------------------------------------------- /resources/logos/IMAX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/IMAX.png -------------------------------------------------------------------------------- /resources/logos/ITV1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/ITV1.png -------------------------------------------------------------------------------- /resources/logos/Kerrang!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Kerrang!.png -------------------------------------------------------------------------------- /resources/logos/Kid TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Kid TV.png -------------------------------------------------------------------------------- /resources/logos/LA Muscle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/LA Muscle.png -------------------------------------------------------------------------------- /resources/logos/Lifetime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Lifetime.png -------------------------------------------------------------------------------- /resources/logos/Live Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Live Music.png -------------------------------------------------------------------------------- /resources/logos/MGM HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/MGM HD.png -------------------------------------------------------------------------------- /resources/logos/MTV Dance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/MTV Dance.png -------------------------------------------------------------------------------- /resources/logos/MTV Trax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/MTV Trax.png -------------------------------------------------------------------------------- /resources/logos/MTV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/MTV.png -------------------------------------------------------------------------------- /resources/logos/Mad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Mad.png -------------------------------------------------------------------------------- /resources/logos/Marvel Studios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Marvel Studios.png -------------------------------------------------------------------------------- /resources/logos/Marvel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Marvel.png -------------------------------------------------------------------------------- /resources/logos/Mini-Series TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Mini-Series TV.png -------------------------------------------------------------------------------- /resources/logos/Music Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Music Movies.png -------------------------------------------------------------------------------- /resources/logos/Mystery Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Mystery Movies.png -------------------------------------------------------------------------------- /resources/logos/Mystery TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Mystery TV.png -------------------------------------------------------------------------------- /resources/logos/Mystery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Mystery.png -------------------------------------------------------------------------------- /resources/logos/NBC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/NBC.png -------------------------------------------------------------------------------- /resources/logos/National Geographic HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/National Geographic HD.png -------------------------------------------------------------------------------- /resources/logos/National Geographic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/National Geographic.png -------------------------------------------------------------------------------- /resources/logos/Nature Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Nature Channel.png -------------------------------------------------------------------------------- /resources/logos/Nature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Nature.png -------------------------------------------------------------------------------- /resources/logos/Netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Netflix.png -------------------------------------------------------------------------------- /resources/logos/Nickelodeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Nickelodeon.png -------------------------------------------------------------------------------- /resources/logos/Nova Cinema 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Nova Cinema 1.png -------------------------------------------------------------------------------- /resources/logos/Nova Cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Nova Cinema.png -------------------------------------------------------------------------------- /resources/logos/Orange Cinemax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Orange Cinemax.png -------------------------------------------------------------------------------- /resources/logos/Oscar Cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Oscar Cinema.png -------------------------------------------------------------------------------- /resources/logos/Paramount Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Paramount Comedy.png -------------------------------------------------------------------------------- /resources/logos/Pixar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Pixar.png -------------------------------------------------------------------------------- /resources/logos/Premium Cinema Energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Premium Cinema Energy.png -------------------------------------------------------------------------------- /resources/logos/Premium Cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Premium Cinema.png -------------------------------------------------------------------------------- /resources/logos/Q Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Q Music.png -------------------------------------------------------------------------------- /resources/logos/Quest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Quest.png -------------------------------------------------------------------------------- /resources/logos/Qulli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Qulli.png -------------------------------------------------------------------------------- /resources/logos/Real TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Real TV.png -------------------------------------------------------------------------------- /resources/logos/Recent Releases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Recent Releases.png -------------------------------------------------------------------------------- /resources/logos/Romance Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Romance Movies.png -------------------------------------------------------------------------------- /resources/logos/Romance TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Romance TV.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sci-Fi HD.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sci-Fi Movies.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sci-Fi TV.png -------------------------------------------------------------------------------- /resources/logos/Sci-Fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sci-Fi.png -------------------------------------------------------------------------------- /resources/logos/SciFi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/SciFi.png -------------------------------------------------------------------------------- /resources/logos/Science Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Science Channel.png -------------------------------------------------------------------------------- /resources/logos/Science-Fiction TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Science-Fiction TV.png -------------------------------------------------------------------------------- /resources/logos/Science.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Science.png -------------------------------------------------------------------------------- /resources/logos/Showcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Showcase.png -------------------------------------------------------------------------------- /resources/logos/Showtime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Showtime.png -------------------------------------------------------------------------------- /resources/logos/Silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Silver.png -------------------------------------------------------------------------------- /resources/logos/Sky Movies HD Family.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sky Movies HD Family.png -------------------------------------------------------------------------------- /resources/logos/Sky1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sky1.png -------------------------------------------------------------------------------- /resources/logos/Sony Max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sony Max.png -------------------------------------------------------------------------------- /resources/logos/Spike TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Spike TV.png -------------------------------------------------------------------------------- /resources/logos/Sports Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Sports Movies.png -------------------------------------------------------------------------------- /resources/logos/Star Movies HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Star Movies HD.png -------------------------------------------------------------------------------- /resources/logos/Star Plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Star Plus.png -------------------------------------------------------------------------------- /resources/logos/Star Wars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Star Wars.png -------------------------------------------------------------------------------- /resources/logos/Starz!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Starz!.png -------------------------------------------------------------------------------- /resources/logos/Starz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Starz.png -------------------------------------------------------------------------------- /resources/logos/Suspense Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Suspense Movies.png -------------------------------------------------------------------------------- /resources/logos/Suspense TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Suspense TV.png -------------------------------------------------------------------------------- /resources/logos/Suspense.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Suspense.png -------------------------------------------------------------------------------- /resources/logos/Syfy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Syfy.png -------------------------------------------------------------------------------- /resources/logos/Syndicated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Syndicated.png -------------------------------------------------------------------------------- /resources/logos/TCM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/TCM.png -------------------------------------------------------------------------------- /resources/logos/TED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/TED.png -------------------------------------------------------------------------------- /resources/logos/TLC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/TLC.png -------------------------------------------------------------------------------- /resources/logos/TNT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/TNT.png -------------------------------------------------------------------------------- /resources/logos/The 2000s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/The 2000s.png -------------------------------------------------------------------------------- /resources/logos/The 80s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/The 80s.png -------------------------------------------------------------------------------- /resources/logos/The 90s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/The 90s.png -------------------------------------------------------------------------------- /resources/logos/The CW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/The CW.png -------------------------------------------------------------------------------- /resources/logos/The Comedy Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/The Comedy Channel.png -------------------------------------------------------------------------------- /resources/logos/The Poker Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/The Poker Channel.png -------------------------------------------------------------------------------- /resources/logos/Thriller Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Thriller Movies.png -------------------------------------------------------------------------------- /resources/logos/Thriller TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Thriller TV.png -------------------------------------------------------------------------------- /resources/logos/Thriller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Thriller.png -------------------------------------------------------------------------------- /resources/logos/Travel Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Travel Channel.png -------------------------------------------------------------------------------- /resources/logos/Turbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Turbo.png -------------------------------------------------------------------------------- /resources/logos/Turner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Turner.png -------------------------------------------------------------------------------- /resources/logos/UPN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/UPN.png -------------------------------------------------------------------------------- /resources/logos/USA Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/USA Network.png -------------------------------------------------------------------------------- /resources/logos/USA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/USA.png -------------------------------------------------------------------------------- /resources/logos/Universal Channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Universal Channel.png -------------------------------------------------------------------------------- /resources/logos/Universal Network Television.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Universal Network Television.png -------------------------------------------------------------------------------- /resources/logos/VH1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/VH1.png -------------------------------------------------------------------------------- /resources/logos/Versus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Versus.png -------------------------------------------------------------------------------- /resources/logos/War Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/War Movies.png -------------------------------------------------------------------------------- /resources/logos/Warner Bros.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Warner Bros.png -------------------------------------------------------------------------------- /resources/logos/Western Movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Western Movies.png -------------------------------------------------------------------------------- /resources/logos/Western TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Western TV.png -------------------------------------------------------------------------------- /resources/logos/Western.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Western.png -------------------------------------------------------------------------------- /resources/logos/Zumba Fitness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/Zumba Fitness.png -------------------------------------------------------------------------------- /resources/logos/action and adventure tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/action and adventure tv.png -------------------------------------------------------------------------------- /resources/logos/action movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/action movies.png -------------------------------------------------------------------------------- /resources/logos/animation tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/animation tv.png -------------------------------------------------------------------------------- /resources/logos/animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/animation.png -------------------------------------------------------------------------------- /resources/logos/bbc 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/bbc 2.png -------------------------------------------------------------------------------- /resources/logos/bbc one.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/bbc one.png -------------------------------------------------------------------------------- /resources/logos/bbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/bbc.png -------------------------------------------------------------------------------- /resources/logos/cbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/cbs.png -------------------------------------------------------------------------------- /resources/logos/christmas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/christmas.png -------------------------------------------------------------------------------- /resources/logos/comedycentral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/comedycentral.png -------------------------------------------------------------------------------- /resources/logos/halloween.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/halloween.png -------------------------------------------------------------------------------- /resources/logos/history movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/history movies.png -------------------------------------------------------------------------------- /resources/logos/mobsters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/mobsters.png -------------------------------------------------------------------------------- /resources/logos/movies24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/movies24.png -------------------------------------------------------------------------------- /resources/logos/oldies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/oldies.png -------------------------------------------------------------------------------- /resources/logos/pbs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/pbs.png -------------------------------------------------------------------------------- /resources/logos/science fiction movies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/science fiction movies.png -------------------------------------------------------------------------------- /resources/logos/science fiction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/science fiction.png -------------------------------------------------------------------------------- /resources/logos/space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/space.png -------------------------------------------------------------------------------- /resources/logos/spielberg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/logos/spielberg.png -------------------------------------------------------------------------------- /resources/screenshots/screenshot-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/screenshots/screenshot-01.png -------------------------------------------------------------------------------- /resources/screenshots/screenshot-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/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 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /resources/skins/default/1080i/script.pseudotv.TVOverlay.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Player.HasVideo + !Window.IsActive(videoosd) + ![Player.Seeking | Player.Paused | Player.Forwarding | Player.Rewinding | Player.IsTempo] 6 | 7 | 8 | 0 9 | 0 10 | 1920 11 | 80 12 | ptv_InfoBar.png 13 | 14 | 15 | 13 16 | 10 17 | 60 18 | 60 19 | ptv_logo.png 20 | keep 21 | 22 | 23 | 85 24 | 7 25 | 500 26 | 100 27 | PseudoTv13 28 | left 29 | top 30 | FFF0F0F0 31 | 22000000 32 | 33 | 34 | 35 | 85 36 | 40 37 | 500 38 | 60 39 | PseudoTv10 40 | left 41 | top 42 | FFF0F0F0 43 | 22000000 44 | 45 | 46 | 47 | 1855 48 | 20 49 | 40 50 | 40 51 | ptv_clock.png 52 | keep 53 | 54 | 55 | 1340 56 | 7 57 | 500 58 | 100 59 | PseudoTv13 60 | right 61 | top 62 | FFF0F0F0 63 | 22000000 64 | 65 | 66 | 67 | 1340 68 | 40 69 | 500 70 | 60 71 | PseudoTv10 72 | right 73 | top 74 | FFF0F0F0 75 | 22000000 76 | 77 | 78 | 79 | 80 | 0 81 | 780 82 | 1920 83 | 300 84 | ptv_InfoBar.png 85 | 86 | 87 | 0 88 | 560 89 | 1920 90 | 520 91 | ptv_LogoBack.png 92 | 93 | 94 | 715 95 | 253 96 | 372 97 | $INFO[Player.Art(tvshow.poster)] 98 | keep 99 | ptv_thumb_shadow.png 100 | 20 101 | !String.IsEmpty(Player.Art(tvshow.poster)) 102 | 103 | 104 | 715 105 | 253 106 | 372 107 | $INFO[Player.Art(poster)] 108 | keep 109 | ptv_thumb_shadow.png 110 | 20 111 | String.IsEmpty(Player.Art(tvshow.poster)) + !String.IsEmpty(Player.Art(poster)) 112 | 113 | 114 | 715 115 | 253 116 | 372 117 | ptv_DefaultVideo.png 118 | keep 119 | ptv_thumb_shadow.png 120 | 20 121 | String.IsEmpty(Player.Art(tvshow.poster)) + String.IsEmpty(Player.Art(poster)) 122 | 123 | 124 | Heading label 125 | 252 126 | 795 127 | 300 128 | 25 129 | left 130 | center 131 | PseudoTv12 132 | FFFFA500 133 | 22000000 134 | 135 | 136 | 252 137 | 833 138 | 1475 139 | 40 140 | left 141 | center 142 | PseudoTv14 143 | FF12B2E7 144 | 22000000 145 | false 146 | 1800 147 | 40 148 | 149 | 150 | 151 | Plot 152 | 252 153 | 883 154 | 1640 155 | 85 156 | PseudoTv13 157 | AAFFFFFF 158 | 22000000 159 | True 160 | 161 | 162 | Show Channel Icon 163 | 1740 164 | 795 165 | 150 166 | 80 167 | keep 168 | 169 | 170 | 171 | 24 172 | 967 173 | 770 174 | 90 175 | right 176 | horizontal 177 | 20 178 | 179 | 135 180 | 90 181 | keep 182 | 7 183 | $INFO[VideoPlayer.VideoResolution,ptv_flags/videoresolution/,.png] 184 | 185 | 186 | 135 187 | 90 188 | keep 189 | 7 190 | $INFO[VideoPlayer.VideoCodec,ptv_flags/videocodec/,.png] 191 | 192 | 193 | 135 194 | 90 195 | keep 196 | 7 197 | $INFO[VideoPlayer.AudioChannels,ptv_flags/audiochannel/,.png] 198 | 199 | 200 | 135 201 | 90 202 | keep 203 | 7 204 | $INFO[VideoPlayer.AudioCodec,ptv_flags/audiocodec/,.png] 205 | 206 | 207 | 135 208 | 90 209 | keep 210 | 7 211 | ptv_flags/ptv_cc.png 212 | VideoPlayer.HasSubtitles 213 | 214 | 215 | 216 | 217 | 252 218 | 990 219 | 500 220 | 40 221 | left 222 | center 223 | PseudoTv13 224 | AAFFFFFF 225 | 22000000 226 | 227 | 228 | 229 | 252 230 | 1035 231 | 1640 232 | 30 233 | ptv_white50.png 234 | ptv_white50.png 235 | - 236 | - 237 | - 238 | Player.Progress 239 | 240 | 241 | false 242 | 243 | 244 | 245 | 246 | 247 | Channel Bug 248 | 161 249 | 109 250 | keep 251 | Player.HasVideo + ![Player.Seeking | Player.Paused | Player.Forwarding | Player.Rewinding | Player.IsTempo] 252 | conditional 253 | 254 | 255 | -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/pstvButtonFocus.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvButtonNoFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/pstvButtonNoFocus.png -------------------------------------------------------------------------------- /resources/skins/default/media/pstvTimeBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/pstvTimeBar.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_DefaultVideo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_DefaultVideo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_InfoBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_InfoBar.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_LogoBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_LogoBack.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_black.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_clock.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/0.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/10.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/4.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/5.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/6.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/7.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiochannel/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiochannel/8.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/aac.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aac_latm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/aac_latm.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/ac3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/ac3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/aif.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aifc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/aifc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/aiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/aiff.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/alac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/alac.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/ape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/ape.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/avc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/avc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/cdda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/cdda.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/dca.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dolbydigital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/dolbydigital.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/dts.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dtshd_hra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/dtshd_hra.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dtshd_ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/dtshd_ma.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/dtsma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/dtsma.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/eac3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/eac3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/flac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/flac.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/m4a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/m4a.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/mp1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/mp2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/mp3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/mp3float.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/mp3float.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/ogg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/ogg.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/opus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/opus.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/pcm.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm_bluray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/pcm_bluray.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm_s16le.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/pcm_s16le.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/pcm_s24le.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/pcm_s24le.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/truehd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/truehd.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/vorbis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/vorbis.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/wav.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wavpack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/wavpack.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/wma.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wmapro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/wmapro.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/audiocodec/wmav2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/audiocodec/wmav2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/ptv_cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/ptv_cc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/avc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/avc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/bluray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/bluray.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/div3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/div3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/divx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/divx.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/dvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/dvd.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/dx50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/dx50.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/flv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/flv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/h264.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/h264.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hddvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/hddvd.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hdmv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/hdmv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hev1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/hev1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hevc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/hevc.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/hvc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/hvc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mp4v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/mp4v.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/mpeg1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg1video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/mpeg1video.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/mpeg2.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg2video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/mpeg2video.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/mpeg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/mpeg4.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/tv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vc-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/vc-1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/vc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vhs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/vhs.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vp8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/vp8.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/vp9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/vp9.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/wmv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/wmv.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/wmv3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/wmv3.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/wvc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/wvc1.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videocodec/xvid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videocodec/xvid.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/1080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videoresolution/1080.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videoresolution/480.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/4k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videoresolution/4k.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/540.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videoresolution/540.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/576.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videoresolution/576.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_flags/videoresolution/720.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_flags/videoresolution/720.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_logo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_nub_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_nub_bar.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_arrow-down.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/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/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/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/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_dialogbutton-fo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_dialogbutton-nofo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_dialogbutton-nofo.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_focus.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_radio-button-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/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/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_radio-button-on.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_separator.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_settings/ptv_white70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_settings/ptv_white70.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_thumb_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_thumb_shadow.png -------------------------------------------------------------------------------- /resources/skins/default/media/ptv_white50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/default/media/ptv_white50.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/pstvButtonFocus.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvButtonNoFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/pstvButtonNoFocus.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/pstvTimeBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/pstvTimeBar.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_InfoBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/ptv_InfoBar.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_LogoBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/ptv_LogoBack.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/ptv_clock.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/ptv_logo.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/ptv_separator.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/media/ptv_thumb_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Steveb1968/script.pseudotv/1c802b24fdc9f95653d10426211623accda64bfb/resources/skins/skin.estuary/media/ptv_thumb_shadow.png -------------------------------------------------------------------------------- /resources/skins/skin.estuary/xml/script.pseudotv.TVOverlay.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Player.HasVideo + !Window.IsActive(videoosd) + ![Player.Seeking | Player.Paused | Player.Forwarding | Player.Rewinding | Player.IsTempo] 6 | 7 | 8 | 0 9 | 0 10 | 1920 11 | 80 12 | ptv_InfoBar.png 13 | 14 | 15 | 13 16 | 10 17 | 60 18 | 60 19 | ptv_logo.png 20 | keep 21 | 22 | 23 | 85 24 | 7 25 | 500 26 | 100 27 | font13 28 | left 29 | top 30 | white 31 | text_shadow 32 | 33 | 34 | 35 | 85 36 | 42 37 | 500 38 | 60 39 | font20_title 40 | left 41 | top 42 | white 43 | text_shadow 44 | 45 | 46 | 47 | 1855 48 | 20 49 | 40 50 | 40 51 | ptv_clock.png 52 | keep 53 | 54 | 55 | 1340 56 | 7 57 | 500 58 | 100 59 | font13 60 | right 61 | top 62 | white 63 | text_shadow 64 | 65 | 66 | 67 | 1340 68 | 42 69 | 500 70 | 60 71 | font20_title 72 | right 73 | top 74 | white 75 | text_shadow 76 | 77 | 78 | 79 | 80 | 0 81 | 780 82 | 1920 83 | 300 84 | ptv_InfoBar.png 85 | 86 | 87 | 0 88 | 560 89 | 1920 90 | 520 91 | ptv_LogoBack.png 92 | 93 | 94 | 715 95 | 253 96 | 372 97 | $INFO[Player.Art(tvshow.poster)] 98 | keep 99 | ptv_thumb_shadow.png 100 | 20 101 | !String.IsEmpty(Player.Art(tvshow.poster)) 102 | 103 | 104 | 715 105 | 253 106 | 372 107 | $INFO[Player.Art(poster)] 108 | keep 109 | ptv_thumb_shadow.png 110 | 20 111 | String.IsEmpty(Player.Art(tvshow.poster)) + !String.IsEmpty(Player.Art(poster)) 112 | 113 | 114 | 715 115 | 253 116 | 372 117 | DefaultVideo.png 118 | keep 119 | ptv_thumb_shadow.png 120 | 20 121 | String.IsEmpty(Player.Art(tvshow.poster)) + String.IsEmpty(Player.Art(poster)) 122 | 123 | 124 | Heading label 125 | 252 126 | 795 127 | 300 128 | 25 129 | left 130 | center 131 | font12 132 | orange 133 | text_shadow 134 | 135 | 136 | 252 137 | 833 138 | 1475 139 | 40 140 | left 141 | center 142 | font32_title 143 | button_focus 144 | text_shadow 145 | false 146 | 1800 147 | 40 148 | 149 | 150 | 151 | Plot 152 | 252 153 | 883 154 | 1640 155 | 85 156 | font13 157 | AAFFFFFF 158 | text_shadow 159 | True 160 | 161 | 162 | Show Channel Icon 163 | 1740 164 | 795 165 | 150 166 | 80 167 | keep 168 | 169 | 170 | 171 | 24 172 | 960 173 | 770 174 | 90 175 | right 176 | horizontal 177 | true 178 | 20 179 | 180 | 135 181 | 90 182 | keep 183 | 7 184 | $INFO[VideoPlayer.VideoResolution,flags/videoresolution/,.png] 185 | 186 | 187 | 135 188 | 90 189 | keep 190 | 7 191 | $INFO[VideoPlayer.VideoCodec,flags/videocodec/,.png] 192 | 193 | 194 | 135 195 | 90 196 | keep 197 | 7 198 | $INFO[VideoPlayer.AudioChannels,flags/audiochannel/,.png] 199 | 200 | 201 | 135 202 | 90 203 | keep 204 | 7 205 | $INFO[VideoPlayer.AudioCodec,flags/audiocodec/,.png] 206 | 207 | 208 | 15 209 | 135 210 | 60 211 | keep 212 | flags/flag.png 213 | flags/flag.png 214 | font10 215 | AAFFFFFF 216 | 217 | center 218 | center 219 | VideoPlayer.HasSubtitles 220 | 221 | 222 | 223 | 224 | 252 225 | 985 226 | 500 227 | 40 228 | left 229 | center 230 | font13 231 | AAFFFFFF 232 | text_shadow 233 | 234 | 235 | 236 | 252 237 | 1035 238 | 1640 239 | 30 240 | colors/white50.png 241 | colors/white50.png 242 | Player.Progress 243 | 244 | 245 | false 246 | 247 | 248 | 249 | 250 | 251 | Channel Bug 252 | 161 253 | 109 254 | keep 255 | Player.HasVideo + ![Player.Seeking | Player.Paused | Player.Forwarding | Player.Rewinding | Player.IsTempo] 256 | conditional 257 | 258 | 259 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------