MasterPuppeteer

Initial commit of just livestreams.

package tv.puppetmaster.denmark
import tv.puppetmaster.data.BasePuppetIterator
import tv.puppetmaster.data.i.*
import tv.puppetmaster.data.i.Puppet.PuppetIterator
class DRPuppet implements InstallablePuppet {
static final CHANNELS = [
[
name: "DR1",
description:"General entertainment and news",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "http://drtext-lh.akamaihd.net/i/live/drtext01_0@66578/master.m3u8?b=300-4000",
],
[
name: "DR2",
description:"Goes more in-depth with news and other topics",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "http://drtext-lh.akamaihd.net/i/live/drtext02_0@67577/master.m3u8?b=100-4000",
],
[
name: "DR3",
description:"Aimed at the younger audience (15-30)",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://dr03-lh.akamaihd.net/i/live/dr03_0@147056/master.m3u8?b=300-4000",
],
[
name: "DR K",
description:"K for Culture, has some good documentaries, also plays classical music once in a while",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://dr04-lh.akamaihd.net/i/live/dr04_0@147057/master.m3u8?b=100-4000",
],
[
name: "DR Ramasjang",
description:"Kids TV pre-/early-school ages",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://dr05-lh.akamaihd.net/i/live/dr05_0@147058/master.m3u8?b=100-5000",
],
[
name: "DR Ultra",
description:"Kids TV for the older kids",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://dr06-lh.akamaihd.net/i/live/dr06_0@147059/master.m3u8?b=100-4000",
],
[
name: "DR WEB1",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/event1_0@143691/master.m3u8",
],
[
name: "DR WEB2",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/event2_0@143692/master.m3u8",
],
[
name: "DR WEB3",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/event3_0@143693/master.m3u8?b=100-500",
],
[
name: "DR WEB4",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/event4_0@143694/master.m3u8",
],
[
name: "DR WEB5",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/event5_0@143695/master.m3u8",
],
[
name: "DR WEB6",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/event6_0@193234/master.m3u8",
],
[
name: "DR WEB7",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/webcam_1@143694/master.m3u8",
],
[
name: "DR WEB8",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/p3teradeck_1@75855/master.m3u8",
],
[
name: "DR WEB9",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/DRweb9_1@143694/master.m3u8",
],
[
name: "DR WEB10",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drevent-lh.akamaihd.net/i/DRweb10_1@143694/master.m3u8",
],
[
name: "DR P1",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p1_9@143503/master.m3u8",
],
[
name: "DR P2",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio2-lh.akamaihd.net/i/p2_9@143504/master.m3u8",
],
[
name: "P3",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio3-lh.akamaihd.net/i/p3_9@143506/master.m3u8",
],
[
name: "P4 København",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio3-lh.akamaihd.net/i/p4kobenhavn_9@143509/master.m3u8",
],
[
name: "P4 Bornholm",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p4bornholm_9@143507/master.m3u8",
],
[
name: "P4 Esbjerg",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p4esbjerg_9@143516/master.m3u8",
],
[
name: "P4 Fyn",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio2-lh.akamaihd.net/i/p4fyn_9@143508/master.m3u8",
],
[
name: "P4 Midt & Vest",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p4midtvest_9@143510/master.m3u8",
],
[
name: "P4 Nordjylland",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio2-lh.akamaihd.net/i/p4nordjylland_9@143511/master.m3u8",
],
[
name: "P4 Sjælland",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio3-lh.akamaihd.net/i/p4sjaelland_9@143512/master.m3u8",
],
[
name: "P4 Syd",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p4syd_9@143513/master.m3u8",
],
[
name: "P4 Trekanten",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio2-lh.akamaihd.net/i/p4trekanten_9@143514/master.m3u8",
],
[
name: "P4 Østjylland",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio3-lh.akamaihd.net/i/p4ostjylland_9@143515/master.m3u8",
],
[
name: "DR P5",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p5_9@143530/master.m3u8",
],
[
name: "DR P6 BEAT",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio3-lh.akamaihd.net/i/p6beat_9@143533/master.m3u8",
],
[
name: "DR P7 MIX",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio1-lh.akamaihd.net/i/p7mix_9@143522/master.m3u8",
],
[
name: "DR P8 JAZZ",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio2-lh.akamaihd.net/i/p8jazz_9@143524/master.m3u8",
],
[
name: "DR Ramasjang/Ultra Radio",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio3-lh.akamaihd.net/i/ramasjang_9@143529/master.m3u8",
],
[
name: "DR Nyheder",
imageUrl: "https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
url: "https://drradio2-lh.akamaihd.net/i/drnyheder_9@143532/master.m3u8",
],
]
static final int VERSION_CODE = 5
ParentPuppet mParent
boolean mIsTopLevel
String mName
String mDescription
String mImageUrl
String mBackgroundImageUrl
DRPuppet() {
this(
null,
true,
"DR",
"TV, radio, nyheder og meget mere",
"https://www.dr.dk/assets/img/logos/dr-logo-tv-200x200.png",
"https://pbs.twimg.com/profile_banners/14987451/1456486991/1500x500"
)
}
DRPuppet(ParentPuppet parent, boolean isTopLevel, String name, String description, String imageUrl, String backgroundImageUrl) {
mParent = parent
mIsTopLevel = isTopLevel
mName = name
mDescription = description
mImageUrl = imageUrl
mBackgroundImageUrl = backgroundImageUrl
}
@Override
PuppetIterator getChildren() {
PuppetIterator children = new BasePuppetIterator()
CHANNELS.each {
children.add(new DRSourcesPuppet(
this,
it.name,
it.containsKey('description') ? it.description : null,
it.imageUrl,
mBackgroundImageUrl,
-1,
it.url
))
}
return children
}
@Override
boolean isTopLevel() {
return mIsTopLevel
}
@Override
String getName() {
return mName
}
@Override
String getCategory() {
return "Denmark"
}
@Override
String getShortDescription() {
return mDescription
}
@Override
String getImageUrl() {
return mImageUrl
}
@Override
String getBackgroundImageUrl() {
return mBackgroundImageUrl
}
@Override
boolean isUnavailableIn(String region) {
return false
}
@Override
String getPreferredRegion() {
return null
}
@Override
int getShieldLevel() {
return 0
}
@Override
ParentPuppet getParent() {
return mParent
}
@Override
PuppetIterator getRelated() {
return null
}
@Override
String toString() {
return mParent == null ? getName() : mParent.toString() + " < " + getName()
}
@Override
int getVersionCode() {
return VERSION_CODE
}
@Override
SearchesPuppet getSearchProvider() {
return null
}
@Override
SettingsPuppet getSettingsProvider() {
return null
}
@Override
int getFastlaneBackgroundColor() {
return 0xFF222222
}
@Override
int getSearchAffordanceBackgroundColor() {
return 0xFF1A82BC
}
@Override
int getSelectedBackgroundColor() {
return 0xFF1A82BC
}
@Override
int getPlayerBackgroundColor() {
return 0xFF222222
}
@Override
List<Map<String, String>> getLiveChannelsMetaData() {
def list = []
CHANNELS.each {
list << [
name : it.name,
description : it.containsKey('description') ? it.description : null,
genres : "ENTERTAINMENT",
logo : it.imageUrl,
preferredRegion : 'dk',
url : it.url
]
}
return list
}
class DRSourcesPuppet implements SourcesPuppet {
ParentPuppet mParent
String mName
String mDescription
String mImageUrl
String mBackgroundImageUrl
long mDuration
String mUrl
DRSourcesPuppet(ParentPuppet parent, String name, String description, String imageUrl, String backgroundImageUrl, long duration, String url) {
mParent = parent
mName = name
mDescription = description
mImageUrl = imageUrl
mBackgroundImageUrl = backgroundImageUrl
mDuration = duration
mUrl = url
}
@Override
String getName() {
return mName
}
@Override
String getCategory() {
return null
}
@Override
String getShortDescription() {
return mDescription
}
@Override
String getImageUrl() {
return mImageUrl
}
@Override
String getBackgroundImageUrl() {
return mBackgroundImageUrl
}
@Override
boolean isUnavailableIn(String region) {
return region != 'dk'
}
@Override
String getPreferredRegion() {
return 'dk'
}
@Override
int getShieldLevel() {
return 0
}
@Override
ParentPuppet getParent() {
return mParent
}
@Override
PuppetIterator getRelated() {
return null
}
@Override
String toString() {
return mParent == null ? getName() : mParent.toString() + " < " + getName()
}
@Override
String getPublicationDate() {
return null
}
@Override
long getDuration() {
return mDuration
}
@Override
SourcesPuppet.SourceIterator getSources() {
return new DRSourceIterator()
}
@Override
boolean isLive() {
return mDuration < 0
}
@Override
List<SourcesPuppet.SubtitleDescription> getSubtitles() {
return null
}
class DRSourceIterator implements SourcesPuppet.SourceIterator {
ArrayList<SourcesPuppet.SourceDescription> mSources = null
int mCurrentIndex = 0
@Override
boolean hasNext() {
if (mSources == null) {
mSources = new ArrayList<>()
if (mDuration < 0) {
SourcesPuppet.SourceDescription source = new SourcesPuppet.SourceDescription()
source.url = mUrl
mSources.add(source)
}
}
return mCurrentIndex < mSources.size()
}
@Override
SourcesPuppet.SourceDescription next() {
return mSources.get(mCurrentIndex++)
}
@Override
void remove() {
}
}
}
}
\ No newline at end of file