diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index bb7daa2..ae0cc19 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -9,8 +9,8 @@ android { applicationId = "tv.orbit.classic" minSdk = 26 targetSdk = 36 - versionCode = 114 - versionName = "0.92.0-joe-bob-saturdays" + versionCode = 115 + versionName = "0.93.0-junior-and-ring-x" } buildFeatures { compose = true } compileOptions { sourceCompatibility = JavaVersion.VERSION_17; targetCompatibility = JavaVersion.VERSION_17 } diff --git a/android/app/src/main/java/tv/orbit/classic/ChannelIdentities.kt b/android/app/src/main/java/tv/orbit/classic/ChannelIdentities.kt index d4fabae..6d52723 100644 --- a/android/app/src/main/java/tv/orbit/classic/ChannelIdentities.kt +++ b/android/app/src/main/java/tv/orbit/classic/ChannelIdentities.kt @@ -293,3 +293,46 @@ internal val HorrorDayParts get() = listOf(DayPart(20, 2, SlasherSaturday, days internal const val LAST_DRIVE_IN = "The Last Drive-in with Joe Bob Briggs" internal val AfterDarkEvents get() = listOf(DayPart(21, 1, BMovieThrowbacks, days = setOf(DayOfWeek.FRIDAY)), DayPart(20, 1, listOf(LAST_DRIVE_IN), days = setOf(DayOfWeek.SATURDAY)), DayPart(21, 1, CultClassics, days = setOf(DayOfWeek.SUNDAY))) + +/** Orbit Junior: British children's TV for about 5 to 11, with the classics at breakfast. Tots is the preferred home of modern preschool. */ +private val JuniorBreakfast = listOf("Thomas the Tank Engine & Friends", "Thomas & Friends", "Postman Pat", "Brum", "Rosie and Jim", "Pingu", "Pingu in the City", "Button Moon", + "Tots TV", "Bagpuss", "Camberwick Green", "Trumpton", "The Clangers", "Tweenies", "Rainbow", "The Wombles", "Noddy", "Balamory", "Fimbles", + // Tots is their preferred home; on Junior they belong to breakfast only. + "Peppa Pig", "Teletubbies", "Bob the Builder", "Fireman Sam", "Bluey") +private val JuniorDaytime = listOf("Arthur", "The Magic School Bus", "Shaun the Sheep", "Wallace & Gromit", "Horrid Henry", "Dennis & Gnasher", "Mr. Bean: The Animated Series", + "Sooty", "ChuckleVision") +private val JuniorAfterSchool = listOf("Grange Hill", "Byker Grove", "The Story of Tracy Beaker", "Tracy Beaker Returns", "Horrible Histories", "Art Attack", "Round the Twist", + "The Worst Witch", "The Demon Headmaster", "My Parents Are Aliens", "Bernard's Watch", "Raven", "Knightmare", "Maid Marian and Her Merry Men", "Rentaghost", + "The Animals of Farthing Wood", "Grizzly Tales for Gruesome Kids", "ChuckleVision") +private val JuniorTeatime = listOf("Goosebumps", "Are You Afraid of the Dark?", "Thunderbirds", "Stingray", "Captain Scarlet and the Mysterons", "Horrible Histories") +internal val JuniorShows get() = (JuniorBreakfast + JuniorDaytime + JuniorAfterSchool + JuniorTeatime).distinct() +internal val JuniorDayParts get() = listOf( + DayPart(6, 9, JuniorBreakfast), DayPart(9, 15, JuniorDaytime + JuniorAfterSchool), DayPart(15, 18, JuniorAfterSchool), DayPart(18, 20, JuniorTeatime), + DayPart(20, 6, JuniorDaytime + JuniorAfterSchool)) +/** Story-driven series run in order; comedy, animation and the classics mix. */ +internal val JuniorMixed get() = JuniorShows.toSet() - setOf("Grange Hill", "Byker Grove", "The Story of Tracy Beaker", "Tracy Beaker Returns", "The Demon Headmaster", + "Round the Twist", "The Worst Witch", "Maid Marian and Her Merry Men", "The Animals of Farthing Wood") + +/** Ring X: the archive by day, a flagship show each weeknight evening, documentaries late. Every show runs in its own episode order. */ +private val RingXDaytimeVault = listOf("WWF Prime Time Wrestling", "WWE Heat", "WCW Clash of the Champions", "WCW Saturday Night", "WWE Main Event", "WWE NXT", + "Hulk Hogan's Rock 'n' Wrestling", "ECW Hardcore TV") +/** Read when used, as it builds on lists in ChannelPresets.kt. */ +private val RingXMonday get() = listOf("WWE Raw", "WCW Monday Nitro") + RingXMondayNight +/** Read when used, as it builds on lists in ChannelPresets.kt. */ +private val RingXTuesday get() = listOf("IMPACT! Wrestling", "NWA-TNA") + RingXImpact +/** Read when used, as it builds on lists in ChannelPresets.kt. */ +private val RingXWednesday get() = listOf("All Elite Wrestling: Dynamite", "All Elite Wrestling: Rampage", "All Elite Wrestling: Collision", "AEW Dark: Elevation", + "All Elite Wrestling: Battle of the Belts") + RingXAew +private val RingXThursday = listOf("WWE SmackDown", "WCW Thunder") +private val RingXFriday = listOf("ECW Hardcore TV", "ECW on Sci Fi", "Wrestling Society X") +private val RingXSaturday = listOf("Ring of Honor (2002) [imdb-] [tvdb-386985]", "ROH On HonorClub", "NJPW Strong", "Lucha Underground", "W.O.W. Women of Wrestling", + "Game Changer Wrestling") +private val RingXLate = listOf("Dark Side of the Ring", "The Monday Night War", "WWE Untold", "WWE Rivals", "Biography: WWE Legends", "WWE Icons", "WWE Ruthless Aggression", + "Who Killed WCW?", "The Wrestlers", "Wrestlers", "WWE Legends House", "WWE NXT") +internal val RingXShows get() = (RingXMonday + RingXTuesday + RingXWednesday + RingXThursday + RingXFriday + RingXSaturday + RingXDaytimeVault + RingXLate + RingXVault).distinct() +internal val RingXDayParts get() = listOf( + DayPart(18, 23, RingXMonday, days = setOf(DayOfWeek.MONDAY)), DayPart(18, 23, RingXTuesday, days = setOf(DayOfWeek.TUESDAY)), + DayPart(18, 23, RingXWednesday, days = setOf(DayOfWeek.WEDNESDAY)), DayPart(18, 23, RingXThursday, days = setOf(DayOfWeek.THURSDAY)), + DayPart(18, 23, RingXFriday, days = setOf(DayOfWeek.FRIDAY)), DayPart(18, 23, RingXSaturday, days = setOf(DayOfWeek.SATURDAY)), + // Sunday evening is the vault until PPV Sunday is built. + DayPart(6, 23, RingXDaytimeVault), DayPart(23, 6, RingXLate)) diff --git a/android/app/src/main/java/tv/orbit/classic/ChannelPresets.kt b/android/app/src/main/java/tv/orbit/classic/ChannelPresets.kt index 1777a68..bdc937a 100644 --- a/android/app/src/main/java/tv/orbit/classic/ChannelPresets.kt +++ b/android/app/src/main/java/tv/orbit/classic/ChannelPresets.kt @@ -43,8 +43,7 @@ internal val ChannelPresets = listOf( ChannelPreset(309, "BritX", listOf("Shaun of the Dead", "Hot Fuzz", "The World's End", "Lock, Stock and Two Smoking Barrels", "Snatch", "RocknRolla", "Layer Cake", "Trainspotting", "T2 Trainspotting", "Green Street", "Green Street Hooligans", "The Football Factory", "Dog Soldiers", "Dead Man's Shoes", "28 Days Later", "28 Weeks Later", "This Is England (2007)", "The Gentlemen (2020)", "The Business", "The Firm (1989)", "Rise of the Footsoldier", "The 51st State", "Sexy Beast", "The Bank Job", "The Long Good Friday", "Human Traffic", "Twin Town", "Shallow Grave (1994)", "Four Lions", "Severance (2006)", "Attack the Block", "The Descent (2005)", "In Bruges", "Filth", "Calibre", "Sightseers", "Sweet Sixteen (2002)", "Withnail & I", "The Full Monty", "Billy Elliot", "Bend It Like Beckham", "Kes", "Get Carter (1971)", "The Italian Job (1969)", "Quadrophenia", "Scum (1979)", "Made in Britain", "Nil by Mouth", "Gangster No. 1 (2000)", "Mean Machine", "Kidulthood", "Adulthood (2008)", "Harry Brown", "The Krays", "Legend (2015)", "Bronson", "Eden Lake", "Kill List", "A Field in England", "Fish Tank", "The Inbetweeners Movie", "The Inbetweeners 2", "Alan Partridge", "Monty Python and the Holy Grail", "Life of Brian", "Monty Python's The Meaning of Life", "Ratcatcher", "Control (2007)", "Cockneys vs Zombies", "The Guard (2011)", "Hunger (2008)", "Lock Up", "Rise of the Footsoldier: Part II", "St Trinian's", "Death at a Funeral (2007)", "Hot Fuzz", "Kingsman: The Golden Circle", "Brassed Off", "East Is East", "Secrets & Lies", "My Beautiful Laundrette", "Local Hero", "Gregory's Girl", "Rita, Sue and Bob Too", "Educating Rita", "Shirley Valentine", "The Wicker Man (1973)", "Pride (2014)", "Sing Street", "Starter for 10", "Tyrannosaur", "Wild Bill (2011)", "Yardie"), smartOnly = true, films = true), - ChannelPreset(611, "Orbit Junior", listOf("Thomas the Tank Engine & Friends", "Thomas & Friends", "Fireman Sam", "Postman Pat", "Brum", "Rosie and Jim", "Bob the Builder", "Pingu", "Noddy", "Teletubbies", "Tweenies", "Tots TV", - "Pingu in the City", "Peppa Pig", "Bluey", "Bagpuss", "The Clangers", "Camberwick Green", "Trumpton", "Button Moon", "Rainbow", "Balamory", "Fimbles"), smartOnly = true), + ChannelPreset(611, "Orbit Junior", JuniorShows, smartOnly = true), ChannelPreset(203, "Orbit Wild", WildShows, smartOnly = true), ChannelPreset(102, "Orbit 2", Orbit2Shows, smartOnly = true), ChannelPreset(612, "Wonder", listOf("Snow White and the Seven Dwarfs (1938)", "Pinocchio (1940)", "Dumbo (1941)", "Bambi", "Cinderella (1950)", "Alice in Wonderland (1951)", "Peter Pan (1953)", "Lady and the Tramp (1955)", "Sleeping Beauty (1959)", "One Hundred and One Dalmatians", "The Jungle Book (1967)", "The Aristocats", "Robin Hood (1973)", @@ -64,7 +63,7 @@ internal val ChannelPresets = listOf( ChannelPreset(307, "Orbit Romance", listOf("Pretty Woman", "When Harry Met Sally...", "Sleepless in Seattle", "You've Got Mail", "Notting Hill", "Four Weddings and a Funeral", "Love Actually", "Bridget Jones's Diary", "About Time (2013)", "Titanic (1997)", "Ghost (1990)", "Dirty Dancing (1987)", "The Notebook (2004)", "Crazy, Stupid, Love.", "10 Things I Hate About You", "She's All That", "Clueless", "The Holiday (2006)", "The Proposal (2009)", "Hitch", "Maid in Manhattan", "Runaway Bride", "My Best Friend's Wedding", "While You Were Sleeping (1995)", "Serendipity (2001)", "How to Lose a Guy in 10 Days", "13 Going on 30", "The Wedding Singer", "50 First Dates", "There's Something About Mary", "La La Land", "The Princess Diaries", "Mamma Mia!", "Grease", "Casablanca", "Roman Holiday", "Breakfast at Tiffany's", "Amélie", "Pride & Prejudice", "Sense and Sensibility (1995)", "Crazy Rich Asians", "Me Before You", "Forrest Gump", "Jerry Maguire", "Shakespeare in Love", "Moulin Rouge! (2001)", "Bridget Jones: The Edge of Reason", "Hope Floats", "Sweet Home Alabama", "The Wedding Planner", "Legally Blonde", "Miss Congeniality", "Never Been Kissed", "A Walk to Remember", "The Lake House", "P.S. I Love You", "Dear John", "Valentine's Day (2010)", "New Year's Eve (2011)", "He's Just Not That Into You", "27 Dresses", "Knocked Up", "Forgetting Sarah Marshall", "(500) Days of Summer", "Eternal Sunshine of the Spotless Mind", "Before Sunrise", "Before Sunset", "Sabrina (1954)", "An Officer and a Gentleman", "Top Hat", "Singin' in the Rain", "West Side Story (1961)", "My Fair Lady", "The Sound of Music", "Gone with the Wind", "City of Angels", "The Bodyguard (1992)", "French Kiss", "Green Card", "Working Girl", "Moonstruck", "Annie Hall", "Mamma Mia! Here We Go Again", "About a Boy", "Music and Lyrics", "Two Weeks Notice", "Just Like Heaven", "What Women Want (2000)", "Something's Gotta Give", "It's Complicated", "Easy A", "Love & Basketball", "The Best Man (1999)", "Pride and Prejudice (1940)", "Emma (1996)", "Atonement (2007)", "Brooklyn", "The Big Sick"), smartOnly = true, films = true), ChannelPreset(301, "Orbit Premiere", listOf("Jurassic Park", "The Lost World: Jurassic Park", "Raiders of the Lost Ark", "Indiana Jones and the Temple of Doom", "Indiana Jones and the Last Crusade", "Superman (1978)", "Batman (1989)", "Batman Returns", "Batman Begins", "The Dark Knight", "The Dark Knight Rises", "Spider-Man (2002)", "Spider-Man 2", "X-Men", "X2", "Iron Man (2008)", "The Avengers (2012)", "Avengers: Infinity War", "Avengers: Endgame", "Black Panther (2018)", "Guardians of the Galaxy", "The Lord of the Rings: The Fellowship of the Ring", "The Lord of the Rings: The Two Towers", "The Lord of the Rings: The Return of the King", "Harry Potter and the Philosopher's Stone", "Pirates of the Caribbean: The Curse of the Black Pearl", "Avatar (2009)", "Transformers", "Armageddon", "Twister (1996)", "Top Gun: Maverick", "The Mummy (1999)", "The Mask of Zorro", "Braveheart", "Skyfall", "Mission: Impossible - Fallout", "King Kong (2005)", "Godzilla (2014)", "Pacific Rim", "Wonder Woman (2017)", "Oppenheimer", "Spider-Man: No Way Home", "Deadpool", "Logan", "Captain America: The Winter Soldier", "Captain America: Civil War", "Thor: Ragnarok", "Guardians of the Galaxy Vol. 2", "Avengers: Age of Ultron", "Doctor Strange (2016)", "Spider-Man: Homecoming", "Spider-Man 3", "Jurassic World", "Jurassic Park III", "Man of Steel", "Aquaman (2018)", "X-Men: Days of Future Past", "X-Men: First Class", "Harry Potter and the Chamber of Secrets", "Harry Potter and the Prisoner of Azkaban", "Harry Potter and the Goblet of Fire", "Harry Potter and the Order of the Phoenix", "Harry Potter and the Half-Blood Prince", "Harry Potter and the Deathly Hallows: Part 1", "Harry Potter and the Deathly Hallows: Part 2", "Pirates of the Caribbean: Dead Man's Chest", "Pirates of the Caribbean: At World's End", "The Hobbit: An Unexpected Journey", "The Hobbit: The Desolation of Smaug", "The Hobbit: The Battle of the Five Armies", "Top Gun", "Mission: Impossible - Ghost Protocol", "Mission: Impossible - Rogue Nation", "The Mummy Returns", "Transformers: Revenge of the Fallen", "Transformers: Dark of the Moon", "World War Z", "I Am Legend", "Ready Player One", "Jumanji: Welcome to the Jungle", "National Treasure", "The Da Vinci Code", "Ocean's Eleven (2001)", "Ocean's Twelve", "Ocean's Thirteen", "Cast Away", "Spectre (2015)", "No Time to Die", "The Greatest Showman", "Saving Private Ryan", "Apollo 13", "The Fugitive (1993)", "Sherlock Holmes (2009)", "Inglourious Basterds", "The Revenant (2015)", "Dunkirk (2017)", "Joker (2019)", "Barbie"), smartOnly = true, films = true), ChannelPreset(202, "Odyssey", OdysseyShows, smartOnly = true), - ChannelPreset(401, "Ring X", RingXMondayNight + RingXImpact + RingXAew + RingXVault, smartOnly = true)) + ChannelPreset(401, "Ring X", RingXShows, smartOnly = true)) /** A fallback for a channel with no old loop: its first episodes, in turn. Used only outside its plan. */ internal fun loopFromPool(pool: List, programming: ChannelProgramming): SampleChannel? { diff --git a/android/app/src/main/java/tv/orbit/classic/ChannelSchedule.kt b/android/app/src/main/java/tv/orbit/classic/ChannelSchedule.kt index 32c34be..747f3d0 100644 --- a/android/app/src/main/java/tv/orbit/classic/ChannelSchedule.kt +++ b/android/app/src/main/java/tv/orbit/classic/ChannelSchedule.kt @@ -84,14 +84,12 @@ internal val SmartChannels = listOf( /** Shows that play in a mixed order on channels whose identity is agreed. See ChannelIdentities.kt. */ private val SmartChannelMixed: Map> get() = mapOf(101 to Orbit1Mixed, 102 to Orbit2Mixed, 103 to ThreeMixed, 104 to GoldMixed, 105 to RiotMixed, 602 to HeroesMixed, 603 to OrbitXMixed, 604 to RewindMixed, 605 to ToonZMixed, - 203 to WildMixed, 202 to OdysseyMixed, 107 to EvidenceMixed) + 203 to WildMixed, 202 to OdysseyMixed, 107 to EvidenceMixed, 611 to JuniorMixed) /** Dark Files, from the programming bible: crime by day, mysteries early evening, the paranormal late. */ private val SmartChannelParts: Map> get() = mapOf(101 to Orbit1DayParts, 102 to Orbit2DayParts, 103 to ThreeDayParts, 104 to GoldDayParts, 105 to RiotDayParts, 304 to HorrorDayParts, 602 to HeroesDayParts, 603 to OrbitXDayParts, 604 to RewindDayParts, 605 to ToonZDayParts, 204 to DarkFilesDayParts, 203 to WildDayParts, 202 to OdysseyDayParts, 107 to EvidenceDayParts, - // Ring X, from the bible: each weeknight's own show, and the whole vault the rest of the week. - 401 to listOf(DayPart(0, 24, RingXMondayNight, days = setOf(java.time.DayOfWeek.MONDAY)), DayPart(0, 24, RingXImpact, days = setOf(java.time.DayOfWeek.TUESDAY)), - DayPart(0, 24, RingXAew, days = setOf(java.time.DayOfWeek.WEDNESDAY)))) + 401 to RingXDayParts, 611 to JuniorDayParts) /** Optional bigger pools, only used once reviewed. No rule for Orbit Gold or Orbit Three: nothing in the library's details can tell a British sitcom apart. */ private val SmartChannelRules: Map> get() = mapOf( diff --git a/android/app/src/main/java/tv/orbit/classic/EmbyClient.kt b/android/app/src/main/java/tv/orbit/classic/EmbyClient.kt index e462446..db4d7b3 100644 --- a/android/app/src/main/java/tv/orbit/classic/EmbyClient.kt +++ b/android/app/src/main/java/tv/orbit/classic/EmbyClient.kt @@ -66,7 +66,7 @@ internal class HttpsEmbyTransport(internal val deviceId: String = UUID.randomUUI connection.connectTimeout = 10_000 connection.readTimeout = request.readTimeoutMs ?: if (request.path == "/Sessions/Logout") 5_000 else 15_000 connection.setRequestProperty("Accept", "application/json") - connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.92.0\"") + connection.setRequestProperty("X-Emby-Authorization", "Emby Client=\"Orbit TV\", Device=\"Orbit TV\", DeviceId=\"$deviceId\", Version=\"0.93.0\"") request.token?.let { connection.setRequestProperty("X-Emby-Token", it) } if (request.method == "POST") { val bytes = request.body.orEmpty().toByteArray(Charsets.UTF_8) diff --git a/android/app/src/main/java/tv/orbit/classic/SecureMediaDataSource.kt b/android/app/src/main/java/tv/orbit/classic/SecureMediaDataSource.kt index 60d1e5a..9142818 100644 --- a/android/app/src/main/java/tv/orbit/classic/SecureMediaDataSource.kt +++ b/android/app/src/main/java/tv/orbit/classic/SecureMediaDataSource.kt @@ -33,7 +33,7 @@ internal class SecureMediaDataSource(private val session: EmbySampleSession) : B next.instanceFollowRedirects = false next.connectTimeout = 10_000 next.readTimeout = 20_000 - next.setRequestProperty("User-Agent", "OrbitTV/0.92.0") + next.setRequestProperty("User-Agent", "OrbitTV/0.93.0") next.setRequestProperty("Accept-Encoding", "identity") session.mediaHeaders(address).forEach { (key, value) -> next.setRequestProperty(key, value) } if (dataSpec.position != 0L || dataSpec.length != C.LENGTH_UNSET.toLong()) { diff --git a/docs/VERIFICATION-0.93.0.md b/docs/VERIFICATION-0.93.0.md new file mode 100644 index 0000000..600be5e --- /dev/null +++ b/docs/VERIFICATION-0.93.0.md @@ -0,0 +1,11 @@ +# Orbit TV 0.93.0: Orbit Junior and Ring X identities + +Configuration only, on the existing scheduler. Lists and blocks in ChannelIdentities.kt; reasons in docs/channels/junior.md and ring-x.md. PPV Sunday is not in this build. + +## Replay +Four weeks of hourly top-ups from the box's real files after 0.92.0. Shows the box hasn't read yet used stand-ins with estimated episode counts (33 on Junior, 25 on Ring X), so airtime shares are indicative until the box reads the real counts. +- Both channels: committed plans unchanged, no gaps, no programme outside its block, no episode out of order, no fallbacks, no episode twice in a day or a week. +- Junior: every eligible show aired in week one. The after-school shows lead (Grange Hill, Byker Grove, Knightmare, Raven, Horrible Histories, Art Attack), the classics hold breakfast, and the Tots crossovers only appear there. +- Ring X: each weeknight's flagship shows sit in 18:00 to 23:00 (Monday Raw and Nitro, Tuesday Impact, Wednesday AEW, Thursday SmackDown and Thunder, Friday ECW, Saturday ROH, NJPW and Lucha), with the vault by day and documentaries late. The flagships no longer fill the whole day. AEW Dynamite and Rampage (11 and 14 episodes on the box) rested in week one after their run, so Wednesday showed Collision and Elevation; that evens out with the real counts and the rest of the run. + +Unit tests: 352 passed. Lint passed. Not installed. diff --git a/docs/channels/README.md b/docs/channels/README.md index 0e438af..28466a8 100644 --- a/docs/channels/README.md +++ b/docs/channels/README.md @@ -18,6 +18,6 @@ How weighting works today: within a block, every show gets an equal turn, and fr Film channels follow their own model (genre, rest period, first Orbit screenings), not the 70/20/10 guide. -Documents so far: [Paradox](paradox.md) (agreed), [Orbit 1](orbit-1.md) (agreed), [Orbit 2](orbit-2.md) (agreed), [Orbit Three](orbit-three.md), [Orbit Gold](orbit-gold.md) and [Riot](riot.md) (agreed in principle, installed in 0.87.0), [Vortex](vortex.md), [Heroes](heroes.md), [Orbit X](orbit-x.md), [Rewind](rewind.md) and [ToonZ](toonz.md) (agreed in principle, installed in 0.88.0), [Terra](terra.md), [Orbit Wild](wild.md), [Odyssey](odyssey.md), [Dark Files](dark-files.md) and [Evidence](evidence.md) (agreed, installed in 0.89.0), and the film channels: [Premiere](premiere.md), [Action](action.md), [Sci-Fi](sci-fi.md), [Horror](horror.md), [After Dark](after-dark.md), [VHS](vhs.md), [Romance](romance.md), [Detour](detour.md), [BritX](britx.md), [Wonder](wonder.md), [PixelZ](pixelz.md) (0.90.0). +Documents so far: [Paradox](paradox.md) (agreed), [Orbit 1](orbit-1.md) (agreed), [Orbit 2](orbit-2.md) (agreed), [Orbit Three](orbit-three.md), [Orbit Gold](orbit-gold.md) and [Riot](riot.md) (agreed in principle, installed in 0.87.0), [Vortex](vortex.md), [Heroes](heroes.md), [Orbit X](orbit-x.md), [Rewind](rewind.md) and [ToonZ](toonz.md) (agreed in principle, installed in 0.88.0), [Terra](terra.md), [Orbit Wild](wild.md), [Odyssey](odyssey.md), [Dark Files](dark-files.md) and [Evidence](evidence.md) (agreed, installed in 0.89.0), and the film channels: [Premiere](premiere.md), [Action](action.md), [Sci-Fi](sci-fi.md), [Horror](horror.md), [After Dark](after-dark.md), [VHS](vhs.md), [Romance](romance.md), [Detour](detour.md), [BritX](britx.md), [Wonder](wonder.md), [PixelZ](pixelz.md) (0.90.0), [Orbit Junior](junior.md) and [Ring X](ring-x.md) (agreed, 0.93.0), and, documented as they are, [Orbit Tots](tots.md) and the [Drive-In](drive-in.md). Historical inspiration: real UK channels (Sky One, Trouble, Challenge TV, BBC Two teatime, Bravo, early BBC Three, UK Gold, Cartoon Network UK, Toonami UK, Fox Kids UK, Boomerang) inform the feel. Documents separate verified historical programming, with sources, from shows that only fit the style. Orbit takes the feeling, not a frozen copy of an old schedule. diff --git a/docs/channels/junior.md b/docs/channels/junior.md new file mode 100644 index 0000000..f479281 --- /dev/null +++ b/docs/channels/junior.md @@ -0,0 +1,19 @@ +# Orbit Junior (611): British children's TV + +**Status:** agreed with Paul 3 November 2026, configured in 0.93.0 (ChannelIdentities.kt), awaiting his OK to install. + +**Identity:** proper childhood telly. The step up from Tots, for about 5 to 11s: British children's TV, mostly live action, with gentle British animation, and the nostalgic preschool classics at breakfast. **Against its neighbours:** Tots is modern preschool, ToonZ is classic theatrical cartoons, Rewind is 90s and 2000s American cartoons. + +**Breakfast, 06:00 to 09:00:** Thomas the Tank Engine, Postman Pat, Brum, Rosie and Jim, Pingu, Button Moon, Tots TV, Bagpuss, Camberwick Green, Trumpton, Tweenies, Rainbow, The Wombles; and Peppa Pig, Teletubbies, Bob the Builder and Fireman Sam, whose preferred home is Tots. + +**Daytime, 09:00 to 15:00:** Arthur, The Magic School Bus, Shaun the Sheep, Wallace & Gromit, Horrid Henry, Dennis & Gnasher, Mr. Bean: The Animated Series, Sooty, ChuckleVision, with the after-school shows. + +**After school, 15:00 to 18:00 (core):** Grange Hill, Byker Grove, The Story of Tracy Beaker, Tracy Beaker Returns, Horrible Histories, Art Attack, Round the Twist, The Worst Witch, The Demon Headmaster, My Parents Are Aliens, Bernard's Watch, Raven, Knightmare, Maid Marian and Her Merry Men, Rentaghost, The Animals of Farthing Wood, Grizzly Tales for Gruesome Kids, ChuckleVision. + +**Teatime, 18:00 to 20:00:** Goosebumps, Are You Afraid of the Dark?, Thunderbirds, Stingray, Captain Scarlet and the Mysterons, Horrible Histories. + +**Overnight, 20:00 to 06:00:** daytime and after-school repeats. + +**Order:** story series in order (Grange Hill, Byker Grove, both Tracy Beakers, The Demon Headmaster, Round the Twist, The Worst Witch, Maid Marian, The Animals of Farthing Wood); comedy, animation and the classics mix. + +**Possible crossover, for future review (not staples):** the American tween sitcoms in the library: Even Stevens, Drake & Josh, The Suite Life of Zack & Cody, Hannah Montana, Wizards of Waverly Place. Lizzie McGuire and Kenan & Kel already live on Orbit 1. diff --git a/docs/channels/ring-x.md b/docs/channels/ring-x.md new file mode 100644 index 0000000..bd8cb86 --- /dev/null +++ b/docs/channels/ring-x.md @@ -0,0 +1,21 @@ +# Ring X (401): the wrestling network + +**Status:** agreed with Paul 3 November 2026, configured in 0.93.0, awaiting his OK to install. PPV Sunday is approved in direction as a separate build. + +**Identity:** a real wrestling network: the archive by day, a flagship show each weeknight evening, documentaries late, and (to come) a classic pay-per-view on Sunday evenings. + +**Weeknights, 18:00 to 23:00:** +- **Monday Night Wars:** WWE Raw and WCW Monday Nitro. +- **Tuesday Impact Night:** IMPACT! Wrestling and NWA-TNA. +- **Wednesday AEW Night:** Dynamite, Rampage, Collision, Dark: Elevation, Battle of the Belts. +- **Thursday:** WWE SmackDown and WCW Thunder. +- **Friday ECW:** ECW Hardcore TV, ECW on Sci Fi, Wrestling Society X. +- **Saturday, alternative and international:** Ring of Honor, ROH On HonorClub, NJPW Strong, Lucha Underground, W.O.W., Game Changer Wrestling. + +**Daytime, 06:00 to 23:00 outside those evenings (and all Sunday until PPV Sunday):** the vault: WWF Prime Time Wrestling, WWE Heat, WCW Clash of the Champions, WCW Saturday Night, WWE Main Event, NXT, Hulk Hogan's Rock 'n' Wrestling, ECW Hardcore TV. + +**Late, 23:00 to 06:00:** documentaries and NXT: Dark Side of the Ring, The Monday Night War, WWE Untold, WWE Rivals, Biography: WWE Legends, WWE Icons, Ruthless Aggression, Who Killed WCW?, The Wrestlers, Wrestlers, WWE Legends House. + +**Order:** every show in its own episode order. No RAW-against-Nitro airdate pairing until the metadata is verified (programming bible). + +**Library, 3 November 2026:** about 30 real wrestling series (the original list's guessed WWF, PPV and Attitude names mostly don't exist as series; they stay on the list in case they appear), and about 450 events stored as films (WWE 266, AEW 65, WCW 42, NJPW 38, ECW 26, TNA and Impact 33, ROH 11, NWA Starrcades), median 170 minutes, for PPV Sunday.