Example #1
0
			public DemoGuide() : base(null, true, false) {
				DateTime now=DateTime.Now;
				// Reidījumi no Latvijas un Ukrainas valsts radio attēlošanai izstrādes vidē.
				PreviousBroadcast=new Broadcast(now.AddHours(-1), now, "Польова пошта");
				CurrentBroadcast=new Broadcast(now.AddMinutes(-5), now.AddHours(1), "Kustoņu pasaule",
					"Šoreiz „Kustoņu pasaulē divi temati: no sākuma dzirdēsim - kā vienā ģimenē sadzīvo izbijis patversmes iemītnieks- takšveidīgais Pipariņš ar tīršķirnes franču buldogu Krisu,");
				NextBroadcast=new Broadcast(now.AddHours(1), now.AddHours(2), "Zināmais nezināmajā",
					"reportāža no Baldones observatorijas - vērojot zvaigznes. Kā radās pirmās Galaktikas");
			}
Example #2
0
		protected override async Task UpdateBroadcasts() {
			string description,
				caption=(await client.DownloadStringTaskAsync("http://www.starfm.lv/online/song.txt")).SplitCaption(out description); // Izpildītājs - dziesma (latīņu burtiem).
			if (caption.Length == 0) caption="Star FM";
			if (CurrentBroadcast == null || CurrentBroadcast.Caption != caption) {
				PreviousBroadcast=CurrentBroadcast;
				DateTime now=DateTime.Now;
				CurrentBroadcast=new Broadcast(now, now.AddSeconds(TimerTimeout), caption, description);
			}
		}
Example #3
0
		/// <summary>
		/// Pēc iespējas iestata pašreizējo vai iepriekšējo raidījumu.
		/// </summary>
		/// <param name="current">Pašreizējā (iestatāmā) raidījuma dati.</param>
		/// <param name="now">Dotais brīdis klausītāja laika joslā.</param>
		/// <returns><c>false</c>, ja nomainīja pašreizējo raidījumu.</returns>
		protected bool SetCurrentBroadcast(Broadcast current, DateTime now) {
			if (current.StartTime > now)
				// Ja servera laiks ir priekšā, tad pieņem ka dziesma sākas tagad.
				CurrentBroadcast=new Broadcast(now, current.EndTime, current.Caption, current.Description);
			else if (current.EndTime < now) {
				PreviousBroadcast=current;
				// Mēdz pašreizējā dziesma noskanēt, bet dati par jauno neparādīties. Tad cerīgi uzgaida, cik parasti pārbauda oriģinālais atskaņotājs.
				return true;
			} else CurrentBroadcast=current;
			return false;
		}
Example #4
0
		protected override async Task UpdateBroadcasts() {
			PreviousBroadcast=CurrentBroadcast;
			// NextBroadcast vienmēr null, jo zināma tikai pašreizējā dziesma.
			try {
				// {"status":0,"result":{"duration_sec":"341","title":"\u041b\u0410\u0421\u041a\u041e\u0412\u042b\u0419 \u041c\u0410\u0419 - \u0410 \u042f \u0422\u0430\u043a \u0416\u0434\u0443","id":"57966","start_time":"1361529715","finish_time":1361530056,"mdb_idtrack":"3702","mdb_idexecutor":"376","mdb_retry":"0","module":"channel","track_title":"\u0410 \u042f \u0422\u0430\u043a \u0416\u0434\u0443","executor_title":"\u041b\u0410\u0421\u041a\u041e\u0412\u042b\u0419 \u041c\u0410\u0419","end_time":125,"sample":""},"errorCode":0,"errorMsg":""}
				/* <root type="object">
  <status type="number">0</status>
  <result type="object">
    <duration_sec type="string">284</duration_sec>
    <title type="string">DIGITAL EMOTION - Get Up Action</title>
    <id type="string">74493</id>
    <start_time type="string">1362592329</start_time>
    <finish_time type="number">1362592613</finish_time>
    <mdb_idtrack type="string">31325</mdb_idtrack>
    <mdb_idexecutor type="string">9362</mdb_idexecutor>
    <mdb_retry type="string">0</mdb_retry>
    <module type="string">channel</module>
    <track_title type="string">Get Up Action</track_title>
    <executor_title type="string">DIGITAL EMOTION</executor_title>
    <end_time type="number">65</end_time>
    <sample type="string">http://wz5.101.ru/full/1/74493.mp3</sample>
  </result>
  <errorCode type="number">0</errorCode>
  <errorMsg type="string"></errorMsg>
</root>*/
				DateTime now=DateTime.Now;
				XElement result=(await client.GetEncodedJson(currentUrl)).Element("result");
				if (result.Element("track_title") == null)
					// Ētera stacijas nekādi sevi neatpazīst, tāpēc nevar vienkārši atslēgt nestrādājošo raidījumu sarakstu.
					// result ir title elements ar tekstu "Ожидание...", kā arī nepareizi laika elementi, tāpēc te tos aizstāj ar mājaslapā redzamo tekstu.
					CurrentBroadcast=new Broadcast(now, now.AddHours(1), "Прямой эфир");
				else {
					string caption=WebUtility.HtmlDecode(result.Element("track_title").Value), description=WebUtility.HtmlDecode(result.Element("executor_title").Value);
					if (description != null) {
						// Izpildītājs. Nomaina lielos burtus pret normālu pierakstu, sabojājot, protams, ABBA un dažu citu kolektīvu nosaukumus.
						int splitIdx=description.IndexOf(',');
						if (splitIdx != -1) // Samaina vietām vārdu un uzvārdu.Piemēram, TOZZI, Umberto => Umberto Tozzi
							description=description.Substring(splitIdx+2)+' '+description.Substring(0, splitIdx).ToCapitalized();
						else description=description.ToCapitalized();
					}
					short duration=short.Parse(result.Element("duration_sec").Value); // Dziesmas ilgums sekundēs.
					short delta=short.Parse(result.Element("end_time").Value); // Sekunžu skaits, kurš atlicis līdz dziesmas beigām.
					if (delta <= 0 || duration <= 0) // Kanāla reklāma, pāragrs izsaukums vai kāda cita aizkave.
						CurrentBroadcast=new Broadcast(now, now.AddSeconds(4), caption, description);
					else CurrentBroadcast=new Broadcast(now.AddSeconds(delta-duration), now.AddSeconds(delta), caption, description);
					// start_time un finish_time būtu ērti, ja tie būtu precīzi, bet bieži finish_time izrādās pagātnē, kad end_time vēl manāms.
				}
			} catch { CurrentBroadcast=null; }
		}
Example #5
0
		protected override async Task UpdateBroadcasts() {
			XElement json=await client.GetJson("http://retro.ua/on_air/onair.json");
			XElement item;
			if (CurrentBroadcast == null) {
				item=json.Element("playlists").Element(genre).Elements("item").ElementAt(1);
				DateTime start=GetLocalTime(item.Element("start_ts").Value);
				PreviousBroadcast=new Broadcast(start, start.AddSeconds(short.Parse(item.Element("duration").Value)),
					item.Element("song").Value.ToCapitalized(), item.Element("artists").Elements("item").ElementAt(0).Element("name").Value.ToCapitalized());
			} else if (CurrentBroadcast.Caption != StubCaption) PreviousBroadcast=CurrentBroadcast;
			item=json.Element("playlists").Element(genre).Elements("item").ElementAt(0);
			DateTime now=DateTime.Now;
			if (item == null || SetCurrentBroadcast(new Broadcast(
				GetLocalTime(item.Element("start_ts").Value), GetLocalTime(item.Element("stop_ts").Value),
				item.Element("song").Value.ToCapitalized(), item.Element("artists").Elements("item").ElementAt(0).Element("name").Value.ToCapitalized()), now)) {
				// Ukrainas uztvērējs pārbauda raidījumus ik 5 sekundes reizinātas ar gadījuma skaitli, bet šeit aizkave 30 sekundes tāpat kā Maskavas kanālam.
				CurrentBroadcast=new Broadcast(now, now.AddSeconds(30), StubCaption);
			}
		}
Example #6
0
		protected override async Task UpdateBroadcasts() {
			string description, // Atstāj tikai tekstu: <a href="raidijumi/bistamie-gadi/" title="Bīstamie gadi" >Bīstamie gadi</a>
				caption=htmlRx.Replace((await client.DownloadStringTaskAsync("http://www.naba.lv/naba_skan.php?act=skan&_="+DateTime.UtcNow.Ticks)), string.Empty).
					SplitCaption(out description, "&#160;-&#160;"); // Izpildītājs - dziesma (latīņu burtiem).
			// act=time 14:19 (reiz desmit sekundēs), act=prog Mūzika (UTF8, reizi trijās minūtēs)
			if (description == "\n") { // Ja dziesmai nav norādīts nosaukums un izpildītājs, tad paņem raidījuma nosaukumu.
				caption=await client.DownloadStringTaskAsync("http://www.naba.lv/naba_skan.php?act=prog");
				description=null;
			}
			if (CurrentBroadcast == null || CurrentBroadcast.Caption != caption) {
				PreviousBroadcast=CurrentBroadcast;
				if (listedGuide.CurrentBroadcast.Caption != caption) {
					if (description == null) description=listedGuide.CurrentBroadcast.Caption;
					else description+=Environment.NewLine+listedGuide.CurrentBroadcast.Caption;
				}
				DateTime now=DateTime.Now;
				CurrentBroadcast=new Broadcast(now, now.AddSeconds(TimerTimeout), caption, description);
			}
		}
Example #7
0
		protected override async Task UpdateBroadcasts() {
			MatchCollection songs=songRx.Matches(await client.DownloadStringTaskAsync("http://www.rigaradio.lv/skan-un-skaneja")); // Pēdējās 10 dziesmas.
			var today=TimeZoneInfo.ConvertTime(DateTime.Today, TimeZoneInfo.Local, timezone);
			var song=songs[0].Groups;
			var times=GetTimes(song, today);
			// Iepriekšejā dziesma
			if (CurrentBroadcast == null) {
				if (times.Item2 < DateTime.Now) PreviousBroadcast=GetBroadcast(times.Item1, times.Item2, song);
				else {
					var times2=GetTimes(songs[1].Groups, today);
					bool daySwitch=times2.Item1 > times.Item1; // Vai notika pāreja starp diennaktīm, kad sāka pašreizējo dziesmu.
					PreviousBroadcast=GetBroadcast(daySwitch ? times2.Item1.AddDays(-1):times2.Item1, daySwitch ? times2.Item2.AddDays(-1):times2.Item2, songs[1].Groups);
				}
			} else if (CurrentBroadcast.Caption != "Rīga radio") PreviousBroadcast=CurrentBroadcast;
			// Pašreizējā dziesma
			if (times.Item2 < DateTime.Now) {
				CurrentBroadcast=new Broadcast(times.Item2, DateTime.Now.AddSeconds(20), "Rīga radio");
			} else CurrentBroadcast=GetBroadcast(times.Item1, times.Item2, song);
		}
Example #8
0
		protected override async Task UpdateBroadcasts() {
			// Alternatīva bez ilgumiem ir http://retrofm.ru/online/air/song.js
			// { "song": "WHAT A FEELING", "artist": "CARA IRENE" }
			/* Pēdējās trīs skanējušās dziesmas. Vienmēr latiņu burtiem.
			   [ { "id": "5693", "name": "ALWAYS ON MY MIND", "artist": "BOYS PET SHOP", "start": "1357163566", "duration": "218" },
			   { "id": "5691", "name": "ROZOVY VECHER+NY", "artist": "LASKOVY MAY SHATUNOV YURY", "start": "1357163391", "duration": "164" },
			   { "id": "5689", "name": "LE CAFE DES 3 COLOMBES", "artist": "DASSIN JOE", "start": "1357163176", "duration": "208" } ]
<root type="array">
  <item type="object">
    <id type="string">5703</id>
    <name type="string">TAKE A CHANCE ON ME</name>
    <artist type="string">ABBA</artist>
    <start type="string">1357164716</start>
    <duration type="string">222</duration>
  </item>
</root> */
			DateTime now=DateTime.Now;
			XElement json=await client.GetJson("http://retrofm.ru/online/air/playlist.js");
			if (CurrentBroadcast == null)
				PreviousBroadcast=GetBroadcast(json.Elements("item").ElementAt(1));
			else if (CurrentBroadcast.Caption != StubCaption) PreviousBroadcast=CurrentBroadcast;
			if (SetCurrentBroadcast(GetBroadcast(json.Element("item")), now))
				CurrentBroadcast=new Broadcast(now, now.AddSeconds(30), StubCaption);
		}
Example #9
0
        /// <summary>
        /// Apstrādā meta datus no bināras formas līdz raidījumam.
        /// </summary>
        /// <param name="headerData">Meta dati, kā tie nolasīti no interneta plūsmas.</param>
        /// <param name="headerSize">Noderīgo baitu skaits masīvā <paramref name="headerData"/>.</param>
        public async void ProcessMetaHeader(byte[] headerData, int headerSize)
        {
            if (!started)
            {
                return;
            }
            string metaHeader = metaHeaderEncoding.GetString(headerData, 0, headerSize);

            if (metaHeader != lastMetaHeader)
            {
                System.Diagnostics.Debug.WriteLine(metaHeader);
                Match metaMatch = metaHeaderRx.Match(metaHeader);
                try {
                    Broadcast broadcast = await GetBroadcast(metaMatch.Success?metaMatch.Groups[1].Value.Trim() : null);

                    if (broadcast != null)
                    {
                        PreviousBroadcast = CurrentBroadcast;
                        CurrentBroadcast  = broadcast;
                    }
                } catch {}                 // Gadījumā, ja izgāžas kāds Tīmekļa pieprasījums.
                lastMetaHeader = metaHeader;
            }
        }
Example #10
0
 protected override Tuple <DateTime, Tuple <string, string, string> > DataFromBroadcast(Broadcast broadcast)
 {
     return(Tuple.Create(TimeZoneInfo.ConvertTime(broadcast.StartTime, TimeZoneInfo.Local, timezone),
                         Tuple.Create(broadcast.Caption, broadcast.Description, ((PagedBroadcast)broadcast).PageUrl)));
 }
Example #11
0
 protected override Tuple <DateTime, string> DataFromBroadcast(Broadcast broadcast)
 {
     return(Tuple.Create(TimeZoneInfo.ConvertTime(broadcast.StartTime, TimeZoneInfo.Local, timezone), broadcast.Caption));
 }
Example #12
0
File: Guide.cs Project: drdax/Radio
 /// <summary>Apstādina raidījumu saraksta darbību.</summary>
 public virtual void Stop()
 {
     CurrentBroadcast  = null;
     PreviousBroadcast = null;
     NextBroadcast     = null;
 }
Example #13
0
File: Guide.cs Project: drdax/Radio
		/// <summary>Apstādina raidījumu saraksta darbību.</summary>
		public virtual void Stop() {
			CurrentBroadcast=null;
			PreviousBroadcast=null;
			NextBroadcast=null;
		}
Example #14
0
		private void CopyBroadcastData(Broadcast broadcast) {
			if (broadcast == null) return;
			Clipboard.SetText(string.Concat(broadcast.Caption, Environment.NewLine, broadcast.Description));
		}
Example #15
0
		private void guide_BroadcastChanged(Broadcast broadcast) {
			if (progressTimer != null) progressTimer.Stop();
			if (broadcast == null) {
				Dispatcher.Invoke((Action<string>)((caption) => Title=caption), channel.Caption);
				return;
			}
			if (channel.Guide.HasKnownDuration) {
				double duration=(broadcast.EndTime-broadcast.StartTime).TotalSeconds;
				Dispatcher.Invoke((Action<double, string>)(
					(double newWidth, string broadcastCaption) => {
						progressBar.Width=newWidth; // Jau atskaņotais ilgums.
						SetWindowTitle(broadcastCaption);
					}), Math.Round(ProgressMaxWidth*(DateTime.Now-broadcast.StartTime).TotalSeconds/duration), broadcast.Caption);
				// Intervāls milisekundēs, pēc kurām ilguma rādītājs mainīsies par vienu pikseli.
				progressTimer.Interval=Math.Ceiling(1000*duration/ProgressMaxWidth);
				progressTimer.Start();
			} else Dispatcher.Invoke((Action<string>)SetWindowTitle, broadcast.Caption);
		}
Example #16
0
		private void listedGuide_NextBroadcastChanged(Broadcast nextBroadcast) {
			NextBroadcast=nextBroadcast;
		}
Example #17
0
 /// <summary>Pieliek raidījuma datus saraksta sākumā.</summary>
 protected abstract Tuple <DateTime, TBroadcastData> DataFromBroadcast(Broadcast broadcast);