fix: add more markdown escape chars, change RichText enum

This commit is contained in:
ThetaDev 2023-05-13 15:52:28 +02:00
parent a0819ac72c
commit 54f42bcb54
13 changed files with 725 additions and 273 deletions

View file

@ -8,11 +8,21 @@ Paginator(
Comment(
id: "UgyrLHPb5Q8yx7XzfKl4AaABAg",
text: RichText([
Text("200.000.000 "),
Text("🤘🏻"),
Text("🫶"),
Text("🏻"),
Text("💗"),
Text(
text: "200.000.000 ",
),
Text(
text: "🤘🏻",
),
Text(
text: "🫶",
),
Text(
text: "🏻",
),
Text(
text: "💗",
),
]),
author: Some(ChannelTag(
id: "UCKv2ITDFlBf8sCaM4bGAq9w",
@ -54,7 +64,9 @@ Paginator(
Comment(
id: "UgwgAG_gp2OsyCJhxh54AaABAg",
text: RichText([
Text("Mys, spotify wraps comes in a few months..so start str3ming Aespa all songs on spotify."),
Text(
text: "Mys, spotify wraps comes in a few months..so start str3ming Aespa all songs on spotify.",
),
]),
author: Some(ChannelTag(
id: "UCpO0iV02gvz1zY0xaEip-Lw",
@ -96,8 +108,12 @@ Paginator(
Comment(
id: "UgyZRJd_8n_wWXjWk0Z4AaABAg",
text: RichText([
Text("Cerita black mamba kan udah tutup buku. Kira2 nanti konsep comebacknya apa yaa? "),
Text("😍"),
Text(
text: "Cerita black mamba kan udah tutup buku. Kira2 nanti konsep comebacknya apa yaa? ",
),
Text(
text: "😍",
),
]),
author: Some(ChannelTag(
id: "UC8Uu90kmT1uBXMuylOe5F2g",
@ -139,11 +155,21 @@ Paginator(
Comment(
id: "UgzHO_WuV1ASUFXXV5Z4AaABAg",
text: RichText([
Text("What do u guys think. Amazing debut song."),
Text("\n"),
Text("Like if u think so"),
Text("\n"),
Text("👇"),
Text(
text: "What do u guys think. Amazing debut song.",
),
Text(
text: "\n",
),
Text(
text: "Like if u think so",
),
Text(
text: "\n",
),
Text(
text: "👇",
),
]),
author: Some(ChannelTag(
id: "UCKBVxnCV35xZ9Oe1U6DLENQ",
@ -185,7 +211,9 @@ Paginator(
Comment(
id: "UgyUnq05V9-nzf-LOTV4AaABAg",
text: RichText([
Text("Love this song so much"),
Text(
text: "Love this song so much",
),
]),
author: Some(ChannelTag(
id: "UCsJS5T1NM3Ra7HLmiPjxeGg",
@ -227,7 +255,9 @@ Paginator(
Comment(
id: "UgwNsbK2-lmMt0B8LrJ4AaABAg",
text: RichText([
Text("They are the background of our karaoke"),
Text(
text: "They are the background of our karaoke",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -269,7 +299,9 @@ Paginator(
Comment(
id: "UgyGXKLpUGtLHkg-8n54AaABAg",
text: RichText([
Text("AESPA"),
Text(
text: "AESPA",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -311,7 +343,9 @@ Paginator(
Comment(
id: "Ugx5WMDdp479KsHnzFx4AaABAg",
text: RichText([
Text("AVATAR EXPERIENCE ASPECT"),
Text(
text: "AVATAR EXPERIENCE ASPECT",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -353,7 +387,9 @@ Paginator(
Comment(
id: "UgyYed-oE-wKjQriOfp4AaABAg",
text: RichText([
Text("HEIHH!!"),
Text(
text: "HEIHH!!",
),
]),
author: Some(ChannelTag(
id: "UCgTOQ5KTAurWso9Hw2IGVow",
@ -395,7 +431,9 @@ Paginator(
Comment(
id: "UgxeiRIMXSk9_z4JhrZ4AaABAg",
text: RichText([
Text("Road to 234M!"),
Text(
text: "Road to 234M!",
),
]),
author: Some(ChannelTag(
id: "UCuTNUUpUzXVljMSEy1YooZw",
@ -437,7 +475,9 @@ Paginator(
Comment(
id: "UgyAfVKtB-4GsArpyFt4AaABAg",
text: RichText([
Text("Happy 4m likes!"),
Text(
text: "Happy 4m likes!",
),
]),
author: Some(ChannelTag(
id: "UCbfj_QOoelszMm1JlXpY7nw",
@ -479,7 +519,9 @@ Paginator(
Comment(
id: "UgzA83tcCkEQKawjyY54AaABAg",
text: RichText([
Text("MY\'s and aespa go fighting!"),
Text(
text: "MY\'s and aespa go fighting!",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -521,7 +563,9 @@ Paginator(
Comment(
id: "UgyCWVh43JdpxgevI-Z4AaABAg",
text: RichText([
Text("I hope they bring back this colorful set for the next comeback"),
Text(
text: "I hope they bring back this colorful set for the next comeback",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -563,7 +607,9 @@ Paginator(
Comment(
id: "Ugz8T4zrMSdovk8PwJl4AaABAg",
text: RichText([
Text("Keep str3aming MY\'s"),
Text(
text: "Keep str3aming MY\'s",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -605,7 +651,9 @@ Paginator(
Comment(
id: "UgyX8EhFG3R2mzdS57t4AaABAg",
text: RichText([
Text("Ji-min-jeong Cross!"),
Text(
text: "Ji-min-jeong Cross!",
),
]),
author: Some(ChannelTag(
id: "UCh6Qqw1NFPNi6l7kfU1b4PA",
@ -647,7 +695,9 @@ Paginator(
Comment(
id: "UgwCYEQKVU2LLcfUaeB4AaABAg",
text: RichText([
Text("BEST DEBUT EVER !!!"),
Text(
text: "BEST DEBUT EVER !!!",
),
]),
author: Some(ChannelTag(
id: "UC-wGUUnJO1gTAw011kCGwfQ",
@ -689,7 +739,9 @@ Paginator(
Comment(
id: "UgwV_-ac6tBgXSoIhSt4AaABAg",
text: RichText([
Text("เพลงโครตน\u{e48}าเบ\u{e37}\u{e48}อ ด\u{e35}แค\u{e48} cg"),
Text(
text: "เพลงโครตน\u{e48}าเบ\u{e37}\u{e48}อ ด\u{e35}แค\u{e48} cg",
),
]),
author: Some(ChannelTag(
id: "UCE7UmaNfXFkZ8iO8SZnx1_g",
@ -731,7 +783,9 @@ Paginator(
Comment(
id: "Ugy0_tjx6M2D6MYACA94AaABAg",
text: RichText([
Text("233230"),
Text(
text: "233230",
),
]),
author: Some(ChannelTag(
id: "UCTV1SSSkB8Rr9Y5pD1tN8eA",

View file

@ -8,10 +8,18 @@ Paginator(
Comment(
id: "UgwcU73OBV8OmSBOKrt4AaABAg",
text: RichText([
Text("Who\'s excited for the special choreography video?? Let\'s go 100M!!!"),
Text("\n"),
Text("\n"),
Text("👇"),
Text(
text: "Who\'s excited for the special choreography video?? Let\'s go 100M!!!",
),
Text(
text: "\n",
),
Text(
text: "\n",
),
Text(
text: "👇",
),
]),
author: Some(ChannelTag(
id: "UC--QwZHg12dkw8UKw5yB1MQ",
@ -53,7 +61,9 @@ Paginator(
Comment(
id: "Ugyrg-RcAMjT9yefZtJ4AaABAg",
text: RichText([
Text("Chicas vamos por los 300M, démosle a todas esas haters chorrillo masivo fulminante de la envidia. Vamos, Mys puede a llegar a ser poderoso si nos unimos. Vamos por los 300M solo nos falta poco para llegar!!!!!!! Vamos Mys, alcemos nuestro teléfonos y brindemos por lo que puede hacer las Mys por Aespa"),
Text(
text: "Chicas vamos por los 300M, démosle a todas esas haters chorrillo masivo fulminante de la envidia. Vamos, Mys puede a llegar a ser poderoso si nos unimos. Vamos por los 300M solo nos falta poco para llegar!!!!!!! Vamos Mys, alcemos nuestro teléfonos y brindemos por lo que puede hacer las Mys por Aespa",
),
]),
author: Some(ChannelTag(
id: "UCqT9iACjb69o254SFlUjcDQ",
@ -95,7 +105,9 @@ Paginator(
Comment(
id: "UgzP00PlfmotA1LxkS94AaABAg",
text: RichText([
Text("The best 4th gen group debut for me. Camerawork, artistic value, choreography, concept, make up and styling, this one nailed ALL."),
Text(
text: "The best 4th gen group debut for me. Camerawork, artistic value, choreography, concept, make up and styling, this one nailed ALL.",
),
]),
author: Some(ChannelTag(
id: "UC00F5JjCjDDum6MlP3eloxw",
@ -137,7 +149,9 @@ Paginator(
Comment(
id: "UgzQJw-ncvJM2tmMstp4AaABAg",
text: RichText([
Text("Black Manba o MV mais icônico do aespa amooooi"),
Text(
text: "Black Manba o MV mais icônico do aespa amooooi",
),
]),
author: Some(ChannelTag(
id: "UCbfGo61YSYOlfyF1cWejhng",
@ -179,7 +193,9 @@ Paginator(
Comment(
id: "Ugz3auWqfNwtNT1UCd54AaABAg",
text: RichText([
Text("MYs if we want to make Black Mamba the most debut MV for 4th gen- let us keep on strêaming. Consistency is the key."),
Text(
text: "MYs if we want to make Black Mamba the most debut MV for 4th gen- let us keep on strêaming. Consistency is the key.",
),
]),
author: Some(ChannelTag(
id: "UCITMz9SiXQrV-cltI-9Auuw",
@ -221,12 +237,24 @@ Paginator(
Comment(
id: "Ugz9k0J4D8v1l101-zN4AaABAg",
text: RichText([
Text("Usually this type of songs don\'t really click with me, but damn this is a masterpiece"),
Text("\n"),
Text("Also why i just find out that this is their debut song after listening it many times..."),
Text("\n"),
Text("\n"),
Text("(ps. Winter is my love <3)"),
Text(
text: "Usually this type of songs don\'t really click with me, but damn this is a masterpiece",
),
Text(
text: "\n",
),
Text(
text: "Also why i just find out that this is their debut song after listening it many times...",
),
Text(
text: "\n",
),
Text(
text: "\n",
),
Text(
text: "(ps. Winter is my love <3)",
),
]),
author: Some(ChannelTag(
id: "UCDaOL1lsanMlpbzaQunz47Q",
@ -268,13 +296,27 @@ Paginator(
Comment(
id: "Ugznd4KqU5k8A7axB7V4AaABAg",
text: RichText([
Text("Keep streaming mys"),
Text("\n"),
Text("Black Mamba and Next Level --> 200 M"),
Text("\n"),
Text("Savage --> 160 M"),
Text("\n"),
Text("Forever, Dreams come true --> 50 M"),
Text(
text: "Keep streaming mys",
),
Text(
text: "\n",
),
Text(
text: "Black Mamba and Next Level --> 200 M",
),
Text(
text: "\n",
),
Text(
text: "Savage --> 160 M",
),
Text(
text: "\n",
),
Text(
text: "Forever, Dreams come true --> 50 M",
),
]),
author: Some(ChannelTag(
id: "UC2P4Zx1o4D3VQIjA_MIToQQ",
@ -316,7 +358,9 @@ Paginator(
Comment(
id: "UgzHSudD7eVIrU37HBV4AaABAg",
text: RichText([
Text("Logremos más de 250M Antes de que se termine el año ♡"),
Text(
text: "Logremos más de 250M Antes de que se termine el año ♡",
),
]),
author: Some(ChannelTag(
id: "UC5cxR3XtdfVR_XT3sfIKdNg",
@ -358,7 +402,9 @@ Paginator(
Comment(
id: "UgxmAIlOcpyAMGUZOlh4AaABAg",
text: RichText([
Text("Llevemos está Masterpiece a los 300M!! ಥ‿ಥ♡ Don\'t stop My, 230M soon"),
Text(
text: "Llevemos está Masterpiece a los 300M!! ಥ‿ಥ♡ Don\'t stop My, 230M soon",
),
]),
author: Some(ChannelTag(
id: "UC5cxR3XtdfVR_XT3sfIKdNg",
@ -400,7 +446,9 @@ Paginator(
Comment(
id: "UgycqtDEEEP5fSwm8tt4AaABAg",
text: RichText([
Text("Keep streaming my\'s let\'s reach 300 million views before aespa\'s full album comeback."),
Text(
text: "Keep streaming my\'s let\'s reach 300 million views before aespa\'s full album comeback.",
),
]),
author: Some(ChannelTag(
id: "UCfQOeizIiPTG3hgKa-6MOeA",
@ -442,9 +490,15 @@ Paginator(
Comment(
id: "UgxgsPeAR4eQ_BjEXs94AaABAg",
text: RichText([
Text("Hay que seguir reproduciendo para que llegue a 300 millones pronto antes de que cumpla dos años en noviembre "),
Text("\n"),
Text("Vamos que si se puede"),
Text(
text: "Hay que seguir reproduciendo para que llegue a 300 millones pronto antes de que cumpla dos años en noviembre ",
),
Text(
text: "\n",
),
Text(
text: "Vamos que si se puede",
),
]),
author: Some(ChannelTag(
id: "UCgRWbRJqUHCvWv6xOuB4few",
@ -486,7 +540,9 @@ Paginator(
Comment(
id: "UgyTlZ_kkX6rrt5wKEp4AaABAg",
text: RichText([
Text("DENLE LIKE AL MV Q FALTA POCO PARA LOS 4M DE LIKES ¡!¡!¡"),
Text(
text: "DENLE LIKE AL MV Q FALTA POCO PARA LOS 4M DE LIKES ¡!¡!¡",
),
]),
author: Some(ChannelTag(
id: "UCBqR9kJhtiHLE6dP-Oo_DMQ",
@ -528,7 +584,9 @@ Paginator(
Comment(
id: "Ugyg3D9dUIErJ4y_L2l4AaABAg",
text: RichText([
Text("146 millones vamos por 147 millones si se puede vamos a por mas GO"),
Text(
text: "146 millones vamos por 147 millones si se puede vamos a por mas GO",
),
]),
author: Some(ChannelTag(
id: "UCjbUNOs6PAAAAo3_feDwLQA",
@ -570,7 +628,9 @@ Paginator(
Comment(
id: "UgymMTcc-41D0p8oXL54AaABAg",
text: RichText([
Text("Best MV debut for this gen!"),
Text(
text: "Best MV debut for this gen!",
),
]),
author: Some(ChannelTag(
id: "UCjXq-4-e-OKn1S3SB52wHRQ",
@ -612,7 +672,9 @@ Paginator(
Comment(
id: "UgznkUYwXNa5x-m6FNF4AaABAg",
text: RichText([
Text("Ya es 2022 y aún no superó este M/V, stream mys para los 300M!"),
Text(
text: "Ya es 2022 y aún no superó este M/V, stream mys para los 300M!",
),
]),
author: Some(ChannelTag(
id: "UCwan9APGANDUfYdYBbU6OeQ",
@ -654,7 +716,9 @@ Paginator(
Comment(
id: "UgxYqYkFAgWb3JaTHYt4AaABAg",
text: RichText([
Text("I get goosebump every single time it comes to NingNings high note. Baby youre amazingggg"),
Text(
text: "I get goosebump every single time it comes to NingNings high note. Baby youre amazingggg",
),
]),
author: Some(ChannelTag(
id: "UC3IEDx0AQiUOP8FtC_MlyFQ",
@ -696,7 +760,9 @@ Paginator(
Comment(
id: "Ugy4IPsS4P7c9YzMhT54AaABAg",
text: RichText([
Text("This is still the best K-pop debut <3 MYS LETS STREAM HARD FOR GIRLS"),
Text(
text: "This is still the best K-pop debut <3 MYS LETS STREAM HARD FOR GIRLS",
),
]),
author: Some(ChannelTag(
id: "UC2vbH7mtFRTiPGLRt9l_OSw",
@ -738,7 +804,9 @@ Paginator(
Comment(
id: "UgwsT7Wpll7wOJQUcWd4AaABAg",
text: RichText([
Text("Don\'t be shy SM Entertainment! Give the girls another legendary comeback!"),
Text(
text: "Don\'t be shy SM Entertainment! Give the girls another legendary comeback!",
),
]),
author: Some(ChannelTag(
id: "UCWgL2cewcYnsIqwN1tMikJg",
@ -780,7 +848,9 @@ Paginator(
Comment(
id: "UgzoZf9nG7VBNhcDLRF4AaABAg",
text: RichText([
Text("aespa\'s debut song is really powerful. I\'ve been listening to this song many times since its release. But, the energy the song is sending me is just as powerful"),
Text(
text: "aespa\'s debut song is really powerful. I\'ve been listening to this song many times since its release. But, the energy the song is sending me is just as powerful",
),
]),
author: Some(ChannelTag(
id: "UCN4tkZuSBXlZ5b9E8CETBUw",
@ -822,9 +892,15 @@ Paginator(
Comment(
id: "UgyMeq1WDhSYAIJ3JQh4AaABAg",
text: RichText([
Text("219,2M still one of my fav debut song! "),
Text("🔥"),
Text("💎"),
Text(
text: "219,2M still one of my fav debut song! ",
),
Text(
text: "🔥",
),
Text(
text: "💎",
),
]),
author: Some(ChannelTag(
id: "UCoU9ZmBOV-CB2Mjl_JM3-ZA",

View file

@ -6,12 +6,16 @@ VideoDetails(
id: "ZeerrnuLi5E",
name: "aespa 에스파 \'Black Mamba\' MV",
description: RichText([
Text("🎧Listen and download aespa\'s debut single \"Black Mamba\": "),
Text(
text: "🎧Listen and download aespa\'s debut single \"Black Mamba\": ",
),
Web(
text: "https://smarturl.it/aespa_BlackMamba",
url: "https://smarturl.it/aespa_BlackMamba",
),
Text("\n🐍The Debut Stage "),
Text(
text: "\n🐍The Debut Stage ",
),
YouTube(
text: "aespa 에스파 \'Black ...",
target: Video(
@ -19,57 +23,95 @@ VideoDetails(
start_time: 0,
),
),
Text("\n\n🎟\u{fe0f} aespa Showcase SYNK in LA! Tickets now on sale: "),
Text(
text: "\n\n🎟\u{fe0f} aespa Showcase SYNK in LA! Tickets now on sale: ",
),
Web(
text: "https://www.ticketmaster.com/event/0A...",
url: "https://www.ticketmaster.com/event/0A005CCD9E871F6E",
),
Text("\n\nSubscribe to aespa Official YouTube Channel!\n"),
Text(
text: "\n\nSubscribe to aespa Official YouTube Channel!\n",
),
Web(
text: "https://www.youtube.com/aespa?sub_con...",
url: "https://www.youtube.com/aespa?sub_confirmation=1",
),
Text("\n\naespa official\n"),
Text(
text: "\n\naespa official\n",
),
Web(
text: "aespa",
url: "https://www.youtube.com/c/aespa",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.instagram.com/aespa_official",
url: "https://www.instagram.com/aespa_official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.tiktok.com/@aespa_official",
url: "https://www.tiktok.com/@aespa_official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://twitter.com/aespa_Official",
url: "https://twitter.com/aespa_Official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.facebook.com/aespa.official",
url: "https://www.facebook.com/aespa.official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://weibo.com/aespa",
url: "https://weibo.com/aespa",
),
Text("\n\n"),
Text("#aespa"),
Text(" "),
Text("#æspa"),
Text(" "),
Text("#BlackMamba"),
Text(" "),
Text("#블랙맘바"),
Text(" "),
Text("#에스파"),
Text("\naespa 에스파 \'Black Mamba\' MV ℗ SM Entertainment"),
Text(
text: "\n\n",
),
Text(
text: "#aespa",
),
Text(
text: " ",
),
Text(
text: "#æspa",
),
Text(
text: " ",
),
Text(
text: "#BlackMamba",
),
Text(
text: " ",
),
Text(
text: "#블랙맘바",
),
Text(
text: " ",
),
Text(
text: "#에스파",
),
Text(
text: "\naespa 에스파 \'Black Mamba\' MV ℗ SM Entertainment",
),
]),
channel: ChannelTag(
id: "UCEf_Bc-KVd7onSeifS3py9g",

View file

@ -6,12 +6,16 @@ VideoDetails(
id: "ZeerrnuLi5E",
name: "aespa 에스파 \'Black Mamba\' MV",
description: RichText([
Text("🎧Listen and download aespa\'s debut single \"Black Mamba\": "),
Text(
text: "🎧Listen and download aespa\'s debut single \"Black Mamba\": ",
),
Web(
text: "https://smarturl.it/aespa_BlackMamba",
url: "https://smarturl.it/aespa_BlackMamba",
),
Text("\n🐍The Debut Stage "),
Text(
text: "\n🐍The Debut Stage ",
),
YouTube(
text: "https://youtu.be/Ky5RT5oGg0w",
target: Video(
@ -19,57 +23,95 @@ VideoDetails(
start_time: 0,
),
),
Text("\n\n🎟\u{fe0f} aespa Showcase SYNK in LA! Tickets now on sale: "),
Text(
text: "\n\n🎟\u{fe0f} aespa Showcase SYNK in LA! Tickets now on sale: ",
),
Web(
text: "https://www.ticketmaster.com/event/0A...",
url: "https://www.ticketmaster.com/event/0A005CCD9E871F6E",
),
Text("\n\nSubscribe to aespa Official YouTube Channel!\n"),
Text(
text: "\n\nSubscribe to aespa Official YouTube Channel!\n",
),
Web(
text: "https://www.youtube.com/aespa?sub_con...",
url: "https://www.youtube.com/aespa?sub_confirmation=1",
),
Text("\n\naespa official\n"),
Text(
text: "\n\naespa official\n",
),
Web(
text: "https://www.youtube.com/c/aespa",
url: "https://www.youtube.com/c/aespa",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.instagram.com/aespa_official",
url: "https://www.instagram.com/aespa_official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.tiktok.com/@aespa_official",
url: "https://www.tiktok.com/@aespa_official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://twitter.com/aespa_Official",
url: "https://twitter.com/aespa_Official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.facebook.com/aespa.official",
url: "https://www.facebook.com/aespa.official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://weibo.com/aespa",
url: "https://weibo.com/aespa",
),
Text("\n\n"),
Text("#aespa"),
Text(" "),
Text("#æspa"),
Text(" "),
Text("#BlackMamba"),
Text(" "),
Text("#블랙맘바"),
Text(" "),
Text("#에스파"),
Text("\naespa 에스파 \'Black Mamba\' MV ℗ SM Entertainment"),
Text(
text: "\n\n",
),
Text(
text: "#aespa",
),
Text(
text: " ",
),
Text(
text: "#æspa",
),
Text(
text: " ",
),
Text(
text: "#BlackMamba",
),
Text(
text: " ",
),
Text(
text: "#블랙맘바",
),
Text(
text: " ",
),
Text(
text: "#에스파",
),
Text(
text: "\naespa 에스파 \'Black Mamba\' MV ℗ SM Entertainment",
),
]),
channel: ChannelTag(
id: "UCEf_Bc-KVd7onSeifS3py9g",

View file

@ -6,96 +6,140 @@ VideoDetails(
id: "nFDBxBUfE74",
name: "The Prepper PC",
description: RichText([
Text("Thanks to Jackery for sponsoring today\'s video! Check out Jackery\'s Solar Generator 2000 Pro and get 10% off with code LinusTechTips at "),
Text(
text: "Thanks to Jackery for sponsoring today\'s video! Check out Jackery\'s Solar Generator 2000 Pro and get 10% off with code LinusTechTips at ",
),
Web(
text: "https://lmg.gg/SG2000PROLTT",
url: "https://lmg.gg/SG2000PROLTT",
),
Text("\n\nThese days, you can game almost anywhere on the planet, anytime. But what if that planet was in the middle of an apocalypse? After youve stashed years of food, water, and toilet paper away, how will you pass the time? With this PC, you can be prepared to game until the whole mess to sort itself out. \n\nDiscuss on the forum: "),
Text(
text: "\n\nThese days, you can game almost anywhere on the planet, anytime. But what if that planet was in the middle of an apocalypse? After youve stashed years of food, water, and toilet paper away, how will you pass the time? With this PC, you can be prepared to game until the whole mess to sort itself out. \n\nDiscuss on the forum: ",
),
Web(
text: "https://linustechtips.com/topic/14554...",
url: "https://linustechtips.com/topic/1455447-the-prepper-pc-sponsored/",
),
Text("\n\nBuy a Jackery Solar Generator 2000 Pro: "),
Text(
text: "\n\nBuy a Jackery Solar Generator 2000 Pro: ",
),
Web(
text: "https://geni.us/034L",
url: "https://geni.us/034L",
),
Text("\n\nBuy a Jackery Explorer 2000 Pro: "),
Text(
text: "\n\nBuy a Jackery Explorer 2000 Pro: ",
),
Web(
text: "https://lmg.gg/1dyF4",
url: "https://lmg.gg/1dyF4",
),
Text("\n\nBuy a Seasonic Fanless TX: "),
Text(
text: "\n\nBuy a Seasonic Fanless TX: ",
),
Web(
text: "https://geni.us/S0Wt76G",
url: "https://geni.us/S0Wt76G",
),
Text("\n\nBuy an Intel Core i3 (12th Gen) i3-12100: "),
Text(
text: "\n\nBuy an Intel Core i3 (12th Gen) i3-12100: ",
),
Web(
text: "https://geni.us/hLZvxa",
url: "https://geni.us/hLZvxa",
),
Text("\n\nBuy an RTX 3050: "),
Text(
text: "\n\nBuy an RTX 3050: ",
),
Web(
text: "https://geni.us/6A6hl",
url: "https://geni.us/6A6hl",
),
Text("\n\nBuy an RX 6500XT: "),
Text(
text: "\n\nBuy an RX 6500XT: ",
),
Web(
text: "https://geni.us/fUF1p",
url: "https://geni.us/fUF1p",
),
Text("\n\nPurchases made through some store links may provide some compensation to Linus Media Group.\n\n► GET MERCH: "),
Text(
text: "\n\nPurchases made through some store links may provide some compensation to Linus Media Group.\n\n► GET MERCH: ",
),
Web(
text: "https://lttstore.com",
url: "https://lttstore.com/",
),
Text("\n► SUPPORT US ON FLOATPLANE: "),
Text(
text: "\n► SUPPORT US ON FLOATPLANE: ",
),
Web(
text: "https://www.floatplane.com/ltt",
url: "https://www.floatplane.com/ltt",
),
Text("\n► AFFILIATES, SPONSORS & REFERRALS: "),
Text(
text: "\n► AFFILIATES, SPONSORS & REFERRALS: ",
),
Web(
text: "https://lmg.gg/sponsors",
url: "https://lmg.gg/sponsors",
),
Text("\n► PODCAST GEAR: "),
Text(
text: "\n► PODCAST GEAR: ",
),
Web(
text: "https://lmg.gg/podcastgear",
url: "https://lmg.gg/podcastgear",
),
Text("\n\n\nFOLLOW US \n"),
Text("-------------------------------------------------"),
Text(" \nTwitter: "),
Text(
text: "\n\n\nFOLLOW US \n",
),
Text(
text: "-------------------------------------------------",
),
Text(
text: " \nTwitter: ",
),
Web(
text: "https://twitter.com/linustech",
url: "https://twitter.com/linustech",
),
Text("\nFacebook: "),
Text(
text: "\nFacebook: ",
),
Web(
text: "http://www.facebook.com/LinusTech",
url: "http://www.facebook.com/LinusTech",
),
Text("\nInstagram: "),
Text(
text: "\nInstagram: ",
),
Web(
text: "https://www.instagram.com/linustech",
url: "https://www.instagram.com/linustech",
),
Text("\nTikTok: "),
Text(
text: "\nTikTok: ",
),
Web(
text: "https://www.tiktok.com/@linustech",
url: "https://www.tiktok.com/@linustech",
),
Text("\nTwitch: "),
Text(
text: "\nTwitch: ",
),
Web(
text: "https://www.twitch.tv/linustech",
url: "https://www.twitch.tv/linustech",
),
Text("\n\nMUSIC CREDIT\n"),
Text("-------------------------------------------------"),
Text("\nIntro: Laszlo - Supernova\nVideo Link: "),
Text(
text: "\n\nMUSIC CREDIT\n",
),
Text(
text: "-------------------------------------------------",
),
Text(
text: "\nIntro: Laszlo - Supernova\nVideo Link: ",
),
YouTube(
text: "https://www.youtube.com/watch?v=PKfxm...",
target: Video(
@ -103,17 +147,23 @@ VideoDetails(
start_time: 0,
),
),
Text("\niTunes Download Link: "),
Text(
text: "\niTunes Download Link: ",
),
Web(
text: "https://itunes.apple.com/us/album/sup...",
url: "https://itunes.apple.com/us/album/supernova/id936805712",
),
Text("\nArtist Link: "),
Text(
text: "\nArtist Link: ",
),
Web(
text: "https://soundcloud.com/laszlomusic",
url: "https://soundcloud.com/laszlomusic",
),
Text("\n\nOutro: Approaching Nirvana - Sugar High\nVideo Link: "),
Text(
text: "\n\nOutro: Approaching Nirvana - Sugar High\nVideo Link: ",
),
YouTube(
text: "https://www.youtube.com/watch?v=ngsGB...",
target: Video(
@ -121,39 +171,57 @@ VideoDetails(
start_time: 0,
),
),
Text("\nListen on Spotify: "),
Text(
text: "\nListen on Spotify: ",
),
Web(
text: "http://spoti.fi/UxWkUw",
url: "http://spoti.fi/UxWkUw",
),
Text("\nArtist Link: "),
Text(
text: "\nArtist Link: ",
),
Web(
text: "http://www.youtube.com/approachingnir...",
url: "http://www.youtube.com/approachingnirvana",
),
Text("\n\nIntro animation by MBarek Abdelwassaa "),
Text(
text: "\n\nIntro animation by MBarek Abdelwassaa ",
),
Web(
text: "https://www.instagram.com/mbarek_abdel/",
url: "https://www.instagram.com/mbarek_abdel/",
),
Text("\nMonitor And Keyboard by vadimmihalkevich / CC BY 4.0 "),
Text(
text: "\nMonitor And Keyboard by vadimmihalkevich / CC BY 4.0 ",
),
Web(
text: "https://geni.us/PgGWp",
url: "https://geni.us/PgGWp",
),
Text("\nMechanical RGB Keyboard by BigBrotherECE / CC BY 4.0 "),
Text(
text: "\nMechanical RGB Keyboard by BigBrotherECE / CC BY 4.0 ",
),
Web(
text: "https://geni.us/mj6pHk4",
url: "https://geni.us/mj6pHk4",
),
Text("\nMouse Gamer free Model By Oscar Creativo / CC BY 4.0 "),
Text(
text: "\nMouse Gamer free Model By Oscar Creativo / CC BY 4.0 ",
),
Web(
text: "https://geni.us/Ps3XfE",
url: "https://geni.us/Ps3XfE",
),
Text("\n\nCHAPTERS\n"),
Text("-------------------------------------------------"),
Text("\n"),
Text(
text: "\n\nCHAPTERS\n",
),
Text(
text: "-------------------------------------------------",
),
Text(
text: "\n",
),
YouTube(
text: "0:00",
target: Video(
@ -161,7 +229,9 @@ VideoDetails(
start_time: 0,
),
),
Text(" Intro\n"),
Text(
text: " Intro\n",
),
YouTube(
text: "0:42",
target: Video(
@ -169,7 +239,9 @@ VideoDetails(
start_time: 42,
),
),
Text(" The PC Built for Super Efficiency\n"),
Text(
text: " The PC Built for Super Efficiency\n",
),
YouTube(
text: "2:41",
target: Video(
@ -177,7 +249,9 @@ VideoDetails(
start_time: 161,
),
),
Text(" Our BURIAL ENCLOSURE?!\n"),
Text(
text: " Our BURIAL ENCLOSURE?!\n",
),
YouTube(
text: "3:31",
target: Video(
@ -185,7 +259,9 @@ VideoDetails(
start_time: 211,
),
),
Text(" Our Power Solution (Thanks Jackery!)\n"),
Text(
text: " Our Power Solution (Thanks Jackery!)\n",
),
YouTube(
text: "4:47",
target: Video(
@ -193,7 +269,9 @@ VideoDetails(
start_time: 287,
),
),
Text(" Diggin\' Holes\n"),
Text(
text: " Diggin\' Holes\n",
),
YouTube(
text: "5:30",
target: Video(
@ -201,7 +279,9 @@ VideoDetails(
start_time: 330,
),
),
Text(" Colonoscopy?\n"),
Text(
text: " Colonoscopy?\n",
),
YouTube(
text: "7:04",
target: Video(
@ -209,7 +289,9 @@ VideoDetails(
start_time: 424,
),
),
Text(" Diggin\' like a man\n"),
Text(
text: " Diggin\' like a man\n",
),
YouTube(
text: "8:29",
target: Video(
@ -217,7 +299,9 @@ VideoDetails(
start_time: 509,
),
),
Text(" The world\'s worst woodsman\n"),
Text(
text: " The world\'s worst woodsman\n",
),
YouTube(
text: "9:03",
target: Video(
@ -225,7 +309,9 @@ VideoDetails(
start_time: 543,
),
),
Text(" Backyard cable management\n"),
Text(
text: " Backyard cable management\n",
),
YouTube(
text: "10:02",
target: Video(
@ -233,7 +319,9 @@ VideoDetails(
start_time: 602,
),
),
Text(" Time to bury this boy\n"),
Text(
text: " Time to bury this boy\n",
),
YouTube(
text: "10:46",
target: Video(
@ -241,7 +329,9 @@ VideoDetails(
start_time: 646,
),
),
Text(" Solar Power Generation\n"),
Text(
text: " Solar Power Generation\n",
),
YouTube(
text: "11:37",
target: Video(
@ -249,7 +339,9 @@ VideoDetails(
start_time: 697,
),
),
Text(" Issues\n"),
Text(
text: " Issues\n",
),
YouTube(
text: "12:08",
target: Video(
@ -257,7 +349,9 @@ VideoDetails(
start_time: 728,
),
),
Text(" First Play Test\n"),
Text(
text: " First Play Test\n",
),
YouTube(
text: "13:20",
target: Video(
@ -265,7 +359,9 @@ VideoDetails(
start_time: 800,
),
),
Text(" Conclusion"),
Text(
text: " Conclusion",
),
]),
channel: ChannelTag(
id: "UCXuqSBlHAE6Xw-yeJA0Tunw",

View file

@ -10,13 +10,19 @@ VideoDetails(
text: "https://media.ccc.de/v/36c3-10652-bah...",
url: "https://media.ccc.de/v/36c3-10652-bahnmining_-_punktlichkeit_ist_eine_zier",
),
Text("\n\n\n\nSeit Anfang 2019 hat David jeden einzelnen Halt jeder einzelnen Zugfahrt auf jedem einzelnen Fernbahnhof in ganz Deutschland systematisch gespeichert. Inklusive Verspätungen und allem drum und dran. Und die werden wir in einem bunten Vortrag erforschen und endlich mal wieder ein bisschen Spaß mit Daten haben.\n\nRechtlicher Hinweis: Es liegt eine schriftliche Genehmigung der Bahn vor, von ihr abgerufene Rohdaten aggregieren und für Vorträge nutzen zu dürfen. Inhaltliche Absprachen oder gar Auflagen existieren nicht.\n\nDie Bahn gibt ihre Verspätungen in \"Prozent pünktlicher Züge pro Monat\" an. Das ist so radikal zusammengefasst, dass man daraus natürlich nichts interessantes lesen kann. Jetzt stellt euch mal vor, man könnte da mal ein bisschen genauer reingucken.\n\nStellt sich raus: Das geht! Davids Datensatz umfasst knapp 25 Millionen Halte - mehr als 50.000 pro Tag. Wir haben die Rohdaten und sind in unserer Betrachtung völlig frei. \n\nDer Vortrag hat wieder mehrere rote Fäden.\n\n 1) Wir vermessen ein fast komplettes Fernverkehrsjahr der deutschen Bahn. Hier etwas Erwartungsmanagement: Sinn ist keinesfalls Bahn-Bashing oder Sensationsheischerei - wer einen Hassvortrag gegen die Bahn erwartet, ist in dieser Veranstaltung falsch. Wir werden die Daten aber nutzen, um die Bahn einmal ein bisschen kennenzulernen. Die Bahn ist eine riesige Maschine mit Millionen beweglicher Teile. Wie viele Zugfahrten gibt es überhaupt? Was sind die größten Bahnhöfe? Wir werden natürlich auch die unerfreulichen Themen ansprechen, für die sich im Moment viele interessieren: Ist das Problem mit den Zugverspätungen wirklich so schlimm, wie alle sagen? Gibt es Orte und Zeiten, an denen es besonders hapert? Und wo fallen Züge einfach aus?\n\n 2) Es gibt wieder mehrere Blicke über den Tellerrand, wie bei Davids vorherigen Vorträgen auch. Ihr werdet wieder ganz automatisch und nebenher einen allgemeinverständlichen Einblick in die heutige Datenauswerterei bekommen. (Eine verbreitete Verschwörungstheorie sagt, euch zur Auswertung öffentlicher Daten zu inspirieren, wäre sogar der Hauptzweck von Davids Vorträgen. :-) )Die Welt braucht Leute mit Ratio, die Analyse wichtiger als Kreischerei finden. Und darum beschreibt David auch, wie man so ein durchaus aufwändiges Hobbyprojekt technisch angeht, Anfängerfehler vermeidet, und verantwortungsvoll handelt.\n\nDavid Kriesel\n\n"),
Text(
text: "\n\n\n\nSeit Anfang 2019 hat David jeden einzelnen Halt jeder einzelnen Zugfahrt auf jedem einzelnen Fernbahnhof in ganz Deutschland systematisch gespeichert. Inklusive Verspätungen und allem drum und dran. Und die werden wir in einem bunten Vortrag erforschen und endlich mal wieder ein bisschen Spaß mit Daten haben.\n\nRechtlicher Hinweis: Es liegt eine schriftliche Genehmigung der Bahn vor, von ihr abgerufene Rohdaten aggregieren und für Vorträge nutzen zu dürfen. Inhaltliche Absprachen oder gar Auflagen existieren nicht.\n\nDie Bahn gibt ihre Verspätungen in \"Prozent pünktlicher Züge pro Monat\" an. Das ist so radikal zusammengefasst, dass man daraus natürlich nichts interessantes lesen kann. Jetzt stellt euch mal vor, man könnte da mal ein bisschen genauer reingucken.\n\nStellt sich raus: Das geht! Davids Datensatz umfasst knapp 25 Millionen Halte - mehr als 50.000 pro Tag. Wir haben die Rohdaten und sind in unserer Betrachtung völlig frei. \n\nDer Vortrag hat wieder mehrere rote Fäden.\n\n 1) Wir vermessen ein fast komplettes Fernverkehrsjahr der deutschen Bahn. Hier etwas Erwartungsmanagement: Sinn ist keinesfalls Bahn-Bashing oder Sensationsheischerei - wer einen Hassvortrag gegen die Bahn erwartet, ist in dieser Veranstaltung falsch. Wir werden die Daten aber nutzen, um die Bahn einmal ein bisschen kennenzulernen. Die Bahn ist eine riesige Maschine mit Millionen beweglicher Teile. Wie viele Zugfahrten gibt es überhaupt? Was sind die größten Bahnhöfe? Wir werden natürlich auch die unerfreulichen Themen ansprechen, für die sich im Moment viele interessieren: Ist das Problem mit den Zugverspätungen wirklich so schlimm, wie alle sagen? Gibt es Orte und Zeiten, an denen es besonders hapert? Und wo fallen Züge einfach aus?\n\n 2) Es gibt wieder mehrere Blicke über den Tellerrand, wie bei Davids vorherigen Vorträgen auch. Ihr werdet wieder ganz automatisch und nebenher einen allgemeinverständlichen Einblick in die heutige Datenauswerterei bekommen. (Eine verbreitete Verschwörungstheorie sagt, euch zur Auswertung öffentlicher Daten zu inspirieren, wäre sogar der Hauptzweck von Davids Vorträgen. :-) )Die Welt braucht Leute mit Ratio, die Analyse wichtiger als Kreischerei finden. Und darum beschreibt David auch, wie man so ein durchaus aufwändiges Hobbyprojekt technisch angeht, Anfängerfehler vermeidet, und verantwortungsvoll handelt.\n\nDavid Kriesel\n\n",
),
Web(
text: "https://fahrplan.events.ccc.de/congre...",
url: "https://fahrplan.events.ccc.de/congress/2019/Fahrplan/events/10652.html",
),
Text("\n\n"),
Text("#36C3"),
Text(
text: "\n\n",
),
Text(
text: "#36C3",
),
]),
channel: ChannelTag(
id: "UC2TXq_t06Hjdr2g_KdKpHQg",

View file

@ -6,92 +6,128 @@ VideoDetails(
id: "nFDBxBUfE74",
name: "The Prepper PC",
description: RichText([
Text("Thanks to Jackery for sponsoring today\'s video! Check out Jackery\'s Solar Generator 2000 Pro and get 10% off with code LinusTechTips at "),
Text(
text: "Thanks to Jackery for sponsoring today\'s video! Check out Jackery\'s Solar Generator 2000 Pro and get 10% off with code LinusTechTips at ",
),
Web(
text: "https://lmg.gg/SG2000PROLTT",
url: "https://lmg.gg/SG2000PROLTT",
),
Text("\n\nThese days, you can game almost anywhere on the planet, anytime. But what if that planet was in the middle of an apocalypse? After youve stashed years of food, water, and toilet paper away, how will you pass the time? With this PC, you can be prepared to game until the whole mess to sort itself out. \n\nDiscuss on the forum: "),
Text(
text: "\n\nThese days, you can game almost anywhere on the planet, anytime. But what if that planet was in the middle of an apocalypse? After youve stashed years of food, water, and toilet paper away, how will you pass the time? With this PC, you can be prepared to game until the whole mess to sort itself out. \n\nDiscuss on the forum: ",
),
Web(
text: "https://linustechtips.com/topic/14554...",
url: "https://linustechtips.com/topic/1455447-the-prepper-pc-sponsored/",
),
Text("\n\nBuy a Jackery Solar Generator 2000 Pro: "),
Text(
text: "\n\nBuy a Jackery Solar Generator 2000 Pro: ",
),
Web(
text: "https://geni.us/034L",
url: "https://geni.us/034L",
),
Text("\n\nBuy a Jackery Explorer 2000 Pro: "),
Text(
text: "\n\nBuy a Jackery Explorer 2000 Pro: ",
),
Web(
text: "https://lmg.gg/1dyF4",
url: "https://lmg.gg/1dyF4",
),
Text("\n\nBuy a Seasonic Fanless TX: "),
Text(
text: "\n\nBuy a Seasonic Fanless TX: ",
),
Web(
text: "https://geni.us/S0Wt76G",
url: "https://geni.us/S0Wt76G",
),
Text("\n\nBuy an Intel Core i3 (12th Gen) i3-12100: "),
Text(
text: "\n\nBuy an Intel Core i3 (12th Gen) i3-12100: ",
),
Web(
text: "https://geni.us/hLZvxa",
url: "https://geni.us/hLZvxa",
),
Text("\n\nBuy an RTX 3050: "),
Text(
text: "\n\nBuy an RTX 3050: ",
),
Web(
text: "https://geni.us/6A6hl",
url: "https://geni.us/6A6hl",
),
Text("\n\nBuy an RX 6500XT: "),
Text(
text: "\n\nBuy an RX 6500XT: ",
),
Web(
text: "https://geni.us/fUF1p",
url: "https://geni.us/fUF1p",
),
Text("\n\nPurchases made through some store links may provide some compensation to Linus Media Group.\n\n► GET MERCH: "),
Text(
text: "\n\nPurchases made through some store links may provide some compensation to Linus Media Group.\n\n► GET MERCH: ",
),
Web(
text: "https://lttstore.com",
url: "https://lttstore.com/",
),
Text("\n► SUPPORT US ON FLOATPLANE: "),
Text(
text: "\n► SUPPORT US ON FLOATPLANE: ",
),
Web(
text: "https://www.floatplane.com/ltt",
url: "https://www.floatplane.com/ltt",
),
Text("\n► AFFILIATES, SPONSORS & REFERRALS: "),
Text(
text: "\n► AFFILIATES, SPONSORS & REFERRALS: ",
),
Web(
text: "https://lmg.gg/sponsors",
url: "https://lmg.gg/sponsors",
),
Text("\n► PODCAST GEAR: "),
Text(
text: "\n► PODCAST GEAR: ",
),
Web(
text: "https://lmg.gg/podcastgear",
url: "https://lmg.gg/podcastgear",
),
Text("\n\n\nFOLLOW US \n--------------------------------------------------- \nTwitter: "),
Text(
text: "\n\n\nFOLLOW US \n--------------------------------------------------- \nTwitter: ",
),
Web(
text: "https://twitter.com/linustech",
url: "https://twitter.com/linustech",
),
Text("\nFacebook: "),
Text(
text: "\nFacebook: ",
),
Web(
text: "http://www.facebook.com/LinusTech",
url: "http://www.facebook.com/LinusTech",
),
Text("\nInstagram: "),
Text(
text: "\nInstagram: ",
),
Web(
text: "https://www.instagram.com/linustech",
url: "https://www.instagram.com/linustech",
),
Text("\nTikTok: "),
Text(
text: "\nTikTok: ",
),
Web(
text: "https://www.tiktok.com/@linustech",
url: "https://www.tiktok.com/@linustech",
),
Text("\nTwitch: "),
Text(
text: "\nTwitch: ",
),
Web(
text: "https://www.twitch.tv/linustech",
url: "https://www.twitch.tv/linustech",
),
Text("\n\nMUSIC CREDIT\n---------------------------------------------------\nIntro: Laszlo - Supernova\nVideo Link: "),
Text(
text: "\n\nMUSIC CREDIT\n---------------------------------------------------\nIntro: Laszlo - Supernova\nVideo Link: ",
),
YouTube(
text: "https://www.youtube.com/watch?v=PKfxm...",
target: Video(
@ -99,17 +135,23 @@ VideoDetails(
start_time: 0,
),
),
Text("\niTunes Download Link: "),
Text(
text: "\niTunes Download Link: ",
),
Web(
text: "https://itunes.apple.com/us/album/sup...",
url: "https://itunes.apple.com/us/album/supernova/id936805712",
),
Text("\nArtist Link: "),
Text(
text: "\nArtist Link: ",
),
Web(
text: "https://soundcloud.com/laszlomusic",
url: "https://soundcloud.com/laszlomusic",
),
Text("\n\nOutro: Approaching Nirvana - Sugar High\nVideo Link: "),
Text(
text: "\n\nOutro: Approaching Nirvana - Sugar High\nVideo Link: ",
),
YouTube(
text: "https://www.youtube.com/watch?v=ngsGB...",
target: Video(
@ -117,37 +159,51 @@ VideoDetails(
start_time: 0,
),
),
Text("\nListen on Spotify: "),
Text(
text: "\nListen on Spotify: ",
),
Web(
text: "http://spoti.fi/UxWkUw",
url: "http://spoti.fi/UxWkUw",
),
Text("\nArtist Link: "),
Text(
text: "\nArtist Link: ",
),
Web(
text: "http://www.youtube.com/approachingnir...",
url: "http://www.youtube.com/approachingnirvana",
),
Text("\n\nIntro animation by MBarek Abdelwassaa "),
Text(
text: "\n\nIntro animation by MBarek Abdelwassaa ",
),
Web(
text: "https://www.instagram.com/mbarek_abdel/",
url: "https://www.instagram.com/mbarek_abdel/",
),
Text("\nMonitor And Keyboard by vadimmihalkevich / CC BY 4.0 "),
Text(
text: "\nMonitor And Keyboard by vadimmihalkevich / CC BY 4.0 ",
),
Web(
text: "https://geni.us/PgGWp",
url: "https://geni.us/PgGWp",
),
Text("\nMechanical RGB Keyboard by BigBrotherECE / CC BY 4.0 "),
Text(
text: "\nMechanical RGB Keyboard by BigBrotherECE / CC BY 4.0 ",
),
Web(
text: "https://geni.us/mj6pHk4",
url: "https://geni.us/mj6pHk4",
),
Text("\nMouse Gamer free Model By Oscar Creativo / CC BY 4.0 "),
Text(
text: "\nMouse Gamer free Model By Oscar Creativo / CC BY 4.0 ",
),
Web(
text: "https://geni.us/Ps3XfE",
url: "https://geni.us/Ps3XfE",
),
Text("\n\nCHAPTERS\n---------------------------------------------------\n"),
Text(
text: "\n\nCHAPTERS\n---------------------------------------------------\n",
),
YouTube(
text: "0:00",
target: Video(
@ -155,7 +211,9 @@ VideoDetails(
start_time: 0,
),
),
Text(" Intro\n"),
Text(
text: " Intro\n",
),
YouTube(
text: "0:42",
target: Video(
@ -163,7 +221,9 @@ VideoDetails(
start_time: 42,
),
),
Text(" The PC Built for Super Efficiency\n"),
Text(
text: " The PC Built for Super Efficiency\n",
),
YouTube(
text: "2:41",
target: Video(
@ -171,7 +231,9 @@ VideoDetails(
start_time: 161,
),
),
Text(" Our BURIAL ENCLOSURE?!\n"),
Text(
text: " Our BURIAL ENCLOSURE?!\n",
),
YouTube(
text: "3:31",
target: Video(
@ -179,7 +241,9 @@ VideoDetails(
start_time: 211,
),
),
Text(" Our Power Solution (Thanks Jackery!)\n"),
Text(
text: " Our Power Solution (Thanks Jackery!)\n",
),
YouTube(
text: "4:47",
target: Video(
@ -187,7 +251,9 @@ VideoDetails(
start_time: 287,
),
),
Text(" Diggin\' Holes\n"),
Text(
text: " Diggin\' Holes\n",
),
YouTube(
text: "5:30",
target: Video(
@ -195,7 +261,9 @@ VideoDetails(
start_time: 330,
),
),
Text(" Colonoscopy?\n"),
Text(
text: " Colonoscopy?\n",
),
YouTube(
text: "7:04",
target: Video(
@ -203,7 +271,9 @@ VideoDetails(
start_time: 424,
),
),
Text(" Diggin\' like a man\n"),
Text(
text: " Diggin\' like a man\n",
),
YouTube(
text: "8:29",
target: Video(
@ -211,7 +281,9 @@ VideoDetails(
start_time: 509,
),
),
Text(" The world\'s worst woodsman\n"),
Text(
text: " The world\'s worst woodsman\n",
),
YouTube(
text: "9:03",
target: Video(
@ -219,7 +291,9 @@ VideoDetails(
start_time: 543,
),
),
Text(" Backyard cable management\n"),
Text(
text: " Backyard cable management\n",
),
YouTube(
text: "10:02",
target: Video(
@ -227,7 +301,9 @@ VideoDetails(
start_time: 602,
),
),
Text(" Time to bury this boy\n"),
Text(
text: " Time to bury this boy\n",
),
YouTube(
text: "10:46",
target: Video(
@ -235,7 +311,9 @@ VideoDetails(
start_time: 646,
),
),
Text(" Solar Power Generation\n"),
Text(
text: " Solar Power Generation\n",
),
YouTube(
text: "11:37",
target: Video(
@ -243,7 +321,9 @@ VideoDetails(
start_time: 697,
),
),
Text(" Issues\n"),
Text(
text: " Issues\n",
),
YouTube(
text: "12:08",
target: Video(
@ -251,7 +331,9 @@ VideoDetails(
start_time: 728,
),
),
Text(" First Play Test\n"),
Text(
text: " First Play Test\n",
),
YouTube(
text: "13:20",
target: Video(
@ -259,7 +341,9 @@ VideoDetails(
start_time: 800,
),
),
Text(" Conclusion"),
Text(
text: " Conclusion",
),
]),
channel: ChannelTag(
id: "UCXuqSBlHAE6Xw-yeJA0Tunw",

View file

@ -6,7 +6,9 @@ VideoDetails(
id: "86YLFOog4GM",
name: "🌎 Nasa Live Stream - Earth From Space : Live Views from the ISS",
description: RichText([
Text("Live NASA - Views Of Earth from Space\nLive video feed of Earth from the International Space Station (ISS) Cameras\n-----------------------------------------------------------------------------------------------------\nWatch our latest video - The Sun - 4K Video / Solar Flares\n"),
Text(
text: "Live NASA - Views Of Earth from Space\nLive video feed of Earth from the International Space Station (ISS) Cameras\n-----------------------------------------------------------------------------------------------------\nWatch our latest video - The Sun - 4K Video / Solar Flares\n",
),
YouTube(
text: "https://www.youtube.com/watch?v=SEzK4...",
target: Video(
@ -14,27 +16,53 @@ VideoDetails(
start_time: 0,
),
),
Text("\n-----------------------------------------------------------------------------------------------------\nNasa ISS live stream from aboard the International Space Station as it circles the earth at 240 miles above the planet, on the edge of space in low earth orbit. \n\nThe station is crewed by NASA astronauts as well as Russian Cosmonauts and a mixture of Japanese, Canadian and European astronauts as well.\n\n"),
Text("#nasalive"),
Text(" "),
Text("#isslive"),
Text(" "),
Text("#spacelive"),
Text(" "),
Text("#earthlive"),
Text(" "),
Text("#earthfromspace"),
Text("\n\nThe Expedition 67 Crew are: \n Sergey Korsakov\nOleg Artemyev\nDenis Matveev\nKjell Lindgren\nRobert Hines\nJessica Watkins\nSamantha Cristoforetti\n\nYulia Peresild\nKlim Shipenko - onboard as part of a film.\n\nTHIS WILL SHOW LIVE and PRE-RECORDED FOOTAGE - depending on signal from the station or if the ISS is on the night side of Earth.\n\nWhen the feed is live the words LIVE NOW will appear in the top left hand corner of the screen.\nAs the Space Station passes into a period of night every 45 mins video is unavailable - during this time, and other breaks in transmission, recorded footage is shown .\nWhen back in daylight the live stream of earth will recommence\n\nIf you are here to talk about a flat earth then please don\'t bother. You can stay and watch our beautiful globe earth as it spins in space , but please don\'t share your nonsense beliefs in our chat.\n\nGot a question about this feed? Read our FAQ\'s\n"),
Text(
text: "\n-----------------------------------------------------------------------------------------------------\nNasa ISS live stream from aboard the International Space Station as it circles the earth at 240 miles above the planet, on the edge of space in low earth orbit. \n\nThe station is crewed by NASA astronauts as well as Russian Cosmonauts and a mixture of Japanese, Canadian and European astronauts as well.\n\n",
),
Text(
text: "#nasalive",
),
Text(
text: " ",
),
Text(
text: "#isslive",
),
Text(
text: " ",
),
Text(
text: "#spacelive",
),
Text(
text: " ",
),
Text(
text: "#earthlive",
),
Text(
text: " ",
),
Text(
text: "#earthfromspace",
),
Text(
text: "\n\nThe Expedition 67 Crew are: \n Sergey Korsakov\nOleg Artemyev\nDenis Matveev\nKjell Lindgren\nRobert Hines\nJessica Watkins\nSamantha Cristoforetti\n\nYulia Peresild\nKlim Shipenko - onboard as part of a film.\n\nTHIS WILL SHOW LIVE and PRE-RECORDED FOOTAGE - depending on signal from the station or if the ISS is on the night side of Earth.\n\nWhen the feed is live the words LIVE NOW will appear in the top left hand corner of the screen.\nAs the Space Station passes into a period of night every 45 mins video is unavailable - during this time, and other breaks in transmission, recorded footage is shown .\nWhen back in daylight the live stream of earth will recommence\n\nIf you are here to talk about a flat earth then please don\'t bother. You can stay and watch our beautiful globe earth as it spins in space , but please don\'t share your nonsense beliefs in our chat.\n\nGot a question about this feed? Read our FAQ\'s\n",
),
Web(
text: "https://spacevideosfaq.tumblr.com/",
url: "https://spacevideosfaq.tumblr.com/",
),
Text("\n\nWatch the earth roll by courtesy of the NASA Live cameras\nInternational Space Station Live Feed: Thanks to NASA for this\n"),
Text(
text: "\n\nWatch the earth roll by courtesy of the NASA Live cameras\nInternational Space Station Live Feed: Thanks to NASA for this\n",
),
Web(
text: "http://www.nasa.gov",
url: "http://www.nasa.gov/",
),
Text(" The ISS passes into the dark side of the earth for roughly half of each of its 90 minute orbits. During this time no video is available.\n\nMusic by Kevin Macleod \n"),
Text(
text: " The ISS passes into the dark side of the earth for roughly half of each of its 90 minute orbits. During this time no video is available.\n\nMusic by Kevin Macleod \n",
),
Web(
text: "http://incompetech.com/music/royalty-...",
url: "http://incompetech.com/music/royalty-free/",

View file

@ -6,7 +6,9 @@ VideoDetails(
id: "XuM2onMGvTI",
name: "Gäa",
description: RichText([
Text("Provided to YouTube by Universal Music Group\n\nGäa · Oonagh\n\nBest Of\n\n℗ An Airforce1 Records / We Love Music recording; ℗ 2014 Universal Music GmbH\n\nReleased on: 2020-08-07\n\nProducer, Associated Performer, Background Vocalist: Hardy Krech\nProducer: Mark Nissen\nAssociated Performer, Background Vocalist: Andreas Fahnert\nAssociated Performer, Background Vocalist: Velile Mchunu\nAssociated Performer, Background Vocalist: Billy King\nAssociated Performer, Background Vocalist: Alex Prince\nAssociated Performer, Flute: Sandro Friedrich\nProgrammer: Hartmut Krech\nEditor: Severin Zahler\nComposer Lyricist: Hartmut Krech\nComposer Lyricist: Mark Nissen\nAuthor: Lukas Hainer\nAuthor: Michael Boden\n\nAuto-generated by YouTube."),
Text(
text: "Provided to YouTube by Universal Music Group\n\nGäa · Oonagh\n\nBest Of\n\n℗ An Airforce1 Records / We Love Music recording; ℗ 2014 Universal Music GmbH\n\nReleased on: 2020-08-07\n\nProducer, Associated Performer, Background Vocalist: Hardy Krech\nProducer: Mark Nissen\nAssociated Performer, Background Vocalist: Andreas Fahnert\nAssociated Performer, Background Vocalist: Velile Mchunu\nAssociated Performer, Background Vocalist: Billy King\nAssociated Performer, Background Vocalist: Alex Prince\nAssociated Performer, Flute: Sandro Friedrich\nProgrammer: Hartmut Krech\nEditor: Severin Zahler\nComposer Lyricist: Hartmut Krech\nComposer Lyricist: Mark Nissen\nAuthor: Lukas Hainer\nAuthor: Michael Boden\n\nAuto-generated by YouTube.",
),
]),
channel: ChannelTag(
id: "UCVGvnqB-5znqPSbMGlhF4Pw",

View file

@ -6,12 +6,16 @@ VideoDetails(
id: "ZeerrnuLi5E",
name: "aespa 에스파 \'Black Mamba\' MV",
description: RichText([
Text("🎧Listen and download aespa\'s debut single \"Black Mamba\": "),
Text(
text: "🎧Listen and download aespa\'s debut single \"Black Mamba\": ",
),
Web(
text: "https://smarturl.it/aespa_BlackMamba",
url: "https://smarturl.it/aespa_BlackMamba",
),
Text("\n🐍The Debut Stage "),
Text(
text: "\n🐍The Debut Stage ",
),
YouTube(
text: "https://youtu.be/Ky5RT5oGg0w",
target: Video(
@ -19,57 +23,95 @@ VideoDetails(
start_time: 0,
),
),
Text("\n\n🎟\u{fe0f} aespa Showcase SYNK in LA! Tickets now on sale: "),
Text(
text: "\n\n🎟\u{fe0f} aespa Showcase SYNK in LA! Tickets now on sale: ",
),
Web(
text: "https://www.ticketmaster.com/event/0A...",
url: "https://www.ticketmaster.com/event/0A005CCD9E871F6E",
),
Text("\n\nSubscribe to aespa Official YouTube Channel!\n"),
Text(
text: "\n\nSubscribe to aespa Official YouTube Channel!\n",
),
Web(
text: "https://www.youtube.com/aespa?sub_con...",
url: "https://www.youtube.com/aespa?sub_confirmation=1",
),
Text("\n\naespa official\n"),
Text(
text: "\n\naespa official\n",
),
Web(
text: "https://www.youtube.com/c/aespa",
url: "https://www.youtube.com/c/aespa",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.instagram.com/aespa_official",
url: "https://www.instagram.com/aespa_official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.tiktok.com/@aespa_official",
url: "https://www.tiktok.com/@aespa_official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://twitter.com/aespa_Official",
url: "https://twitter.com/aespa_Official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://www.facebook.com/aespa.official",
url: "https://www.facebook.com/aespa.official",
),
Text("\n"),
Text(
text: "\n",
),
Web(
text: "https://weibo.com/aespa",
url: "https://weibo.com/aespa",
),
Text("\n\n"),
Text("#aespa"),
Text(" "),
Text("#æspa"),
Text(" "),
Text("#BlackMamba"),
Text(" "),
Text("#블랙맘바"),
Text(" "),
Text("#에스파"),
Text("\naespa 에스파 \'Black Mamba\' MV ℗ SM Entertainment"),
Text(
text: "\n\n",
),
Text(
text: "#aespa",
),
Text(
text: " ",
),
Text(
text: "#æspa",
),
Text(
text: " ",
),
Text(
text: "#BlackMamba",
),
Text(
text: " ",
),
Text(
text: "#블랙맘바",
),
Text(
text: " ",
),
Text(
text: "#에스파",
),
Text(
text: "\naespa 에스파 \'Black Mamba\' MV ℗ SM Entertainment",
),
]),
channel: ChannelTag(
id: "UCEf_Bc-KVd7onSeifS3py9g",

View file

@ -16,7 +16,10 @@ pub struct RichText(pub Vec<TextComponent>);
#[non_exhaustive]
pub enum TextComponent {
/// Plain text
Text(String),
Text {
/// Plain text
text: String,
},
/// Web link
Web {
/// Link text
@ -73,7 +76,7 @@ impl TextComponent {
/// Get the text from the component
pub fn get_text(&self) -> &str {
match self {
TextComponent::Text(text)
TextComponent::Text { text }
| TextComponent::Web { text, .. }
| TextComponent::YouTube { text, .. } => text,
}
@ -84,7 +87,7 @@ impl TextComponent {
/// Returns an empty string if the component is not a link.
pub fn get_url(&self, yt_host: &str) -> String {
match self {
TextComponent::Text(_) => String::new(),
TextComponent::Text { .. } => String::new(),
TextComponent::Web { url, .. } => url.clone(),
TextComponent::YouTube { target, .. } => target.to_url_yt_host(yt_host),
}
@ -94,7 +97,7 @@ impl TextComponent {
impl ToPlaintext for TextComponent {
fn to_plaintext_yt_host(&self, yt_host: &str) -> String {
match self {
TextComponent::Text(text) => text.clone(),
TextComponent::Text { text } => text.clone(),
_ => self.get_url(yt_host),
}
}
@ -103,7 +106,7 @@ impl ToPlaintext for TextComponent {
impl ToHtml for TextComponent {
fn to_html_yt_host(&self, yt_host: &str) -> String {
match self {
TextComponent::Text(text) => util::escape_html(text),
TextComponent::Text { text } => util::escape_html(text),
TextComponent::Web { text, .. } => {
format!(
r#"<a href="{}" target="_blank" rel="noreferrer">{}</a>"#,
@ -125,7 +128,7 @@ impl ToHtml for TextComponent {
impl ToMarkdown for TextComponent {
fn to_markdown_yt_host(&self, yt_host: &str) -> String {
match self {
TextComponent::Text(text) => util::escape_markdown(text),
TextComponent::Text { text } => util::escape_markdown(text),
TextComponent::Web { text, .. } | TextComponent::YouTube { text, .. } => {
format!(
"[{}]({})",
@ -246,26 +249,10 @@ aespa 에스파 'Black Mamba' MV ℗ SM Entertainment"#
fn to_markdown() {
let richtext = RichText::from(TEXT_SOURCE.clone());
let markdown = richtext.to_markdown_yt_host("https://piped.kavin.rocks");
println!("{}", markdown);
assert_eq!(
markdown,
r#"🎧Listen and download aespa's debut single "Black Mamba": [https://smarturl.it/aespa\_BlackMamba](https://smarturl.it/aespa_BlackMamba)<br>
🐍The Debut Stage [https://youtu.be/Ky5RT5oGg0w](https://piped.kavin.rocks/watch?v=Ky5RT5oGg0w)
🎟 aespa Showcase SYNK in LA! Tickets now on sale: [https://www.ticketmaster.com/event/0A...](https://www.ticketmaster.com/event/0A005CCD9E871F6E)
Subscribe to aespa Official YouTube Channel!<br>
[https://www.youtube.com/aespa?sub\_con...](https://www.youtube.com/aespa?sub_confirmation=1)
aespa official<br>
[https://www.youtube.com/c/aespa](https://www.youtube.com/c/aespa)<br>
[https://www.instagram.com/aespa\_official](https://www.instagram.com/aespa_official)<br>
[https://www.tiktok.com/@aespa\_official](https://www.tiktok.com/@aespa_official)<br>
[https://twitter.com/aespa\_Official](https://twitter.com/aespa_Official)<br>
[https://www.facebook.com/aespa.official](https://www.facebook.com/aespa.official)<br>
[https://weibo.com/aespa](https://weibo.com/aespa)
\#aespa \#æspa \#BlackMamba \# \#<br>
aespa 'Black Mamba' MV SM Entertainment"#
r#"🎧Listen and download aespa's debut single "Black Mamba"\: [https\://smarturl.it/aespa\_BlackMamba](https://smarturl.it/aespa_BlackMamba)<br>🐍The Debut Stage [https\://youtu.be/Ky5RT5oGg0w](https://piped.kavin.rocks/watch?v=Ky5RT5oGg0w)<br><br>🎟️ aespa Showcase SYNK in LA! Tickets now on sale\: [https\://www.ticketmaster.com/event/0A...](https://www.ticketmaster.com/event/0A005CCD9E871F6E)<br><br>Subscribe to aespa Official YouTube Channel!<br>[https\://www.youtube.com/aespa?sub\_con...](https://www.youtube.com/aespa?sub_confirmation=1)<br><br>aespa official<br>[https\://www.youtube.com/c/aespa](https://www.youtube.com/c/aespa)<br>[https\://www.instagram.com/aespa\_official](https://www.instagram.com/aespa_official)<br>[https\://www.tiktok.com/@aespa\_official](https://www.tiktok.com/@aespa_official)<br>[https\://twitter.com/aespa\_Official](https://twitter.com/aespa_Official)<br>[https\://www.facebook.com/aespa.official](https://www.facebook.com/aespa.official)<br>[https\://weibo.com/aespa](https://weibo.com/aespa)<br><br>\#aespa \#æspa \#BlackMamba \#블랙맘바 \#에스파<br>aespa 에스파 'Black Mamba' MV ℗ SM Entertainment"#
)
}
}

View file

@ -380,13 +380,13 @@ impl From<TextComponent> for crate::model::richtext::TextComponent {
browse_id,
} => match page_type.to_url_target(browse_id) {
Some(target) => Self::YouTube { text, target },
None => Self::Text(text),
None => Self::Text { text },
},
TextComponent::Web { text, url } => Self::Web {
text,
url: util::sanitize_yt_url(&url),
},
TextComponent::Text { text } => Self::Text(text),
TextComponent::Text { text } => Self::Text { text },
}
}
}

View file

@ -394,21 +394,14 @@ pub fn escape_html(input: &str) -> String {
/// inserting into Markdown.
pub fn escape_markdown(input: &str) -> String {
let mut buf = String::with_capacity(input.len());
let mut chars = input.chars().peekable();
while let Some(c) = chars.next() {
for c in input.chars() {
match c {
'<' => buf.push_str("&lt;"),
'>' => buf.push_str("&gt;"),
'\n' => {
if chars.peek() == Some(&'\n') {
chars.next();
buf.push_str("\n\n");
} else {
buf.push_str("<br>\n");
}
}
'*' | '#' | '(' | ')' | '[' | ']' | '_' | '`' => {
'\n' => buf.push_str("<br>"),
'*' | '#' | '(' | ')' | '[' | ']' | '_' | '`' | '~' | '$' | '^' | '=' | ':' | '+'
| '\\' => {
buf.push('\\');
buf.push(c);
}