ScheduledAgent.cs CampusAppWP8ScheduledTaskAgent::ScheduledAgent CampusAppWP8ScheduledTaskAgent //----------------------------------------------------------------------- //<copyrightfile="ScheduledAgent.cs"company="BTU/IIT"> //TheMITLicense(MIT).Copyright(c)2013BTU/IIT. //</copyright> //<author>Stubbfel</author> //<date>15.10.2013</date> //<summary>Implementsthescheduledagentclass</summary> //----------------------------------------------------------------------- namespaceCampusAppWP8ScheduledTaskAgent { usingSystem; usingSystem.Diagnostics; usingSystem.Globalization; usingSystem.Linq; usingSystem.Windows; usingCampusAppWP8ScheduledTaskAgent.Resources; usingCampusAppWP8ScheduledTaskAgent.Utility; usingCampusAppWPortalLib8.Model.Mensa; usingCampusAppWPortalLib8.Model.RSS; usingCampusAppWPortalLib8.Utility; usingMicrosoft.Phone.Scheduler; usingMicrosoft.Phone.Shell; publicclassScheduledAgent:ScheduledTaskAgent { #regionMember privateMenuWeekModelmensaModel; privateRSSViewModeleventModel; privateRSSViewModelnewsModel; privateintrunningFeeds; #endregion #regionConstructor staticScheduledAgent() { Deployment.Current.Dispatcher.BeginInvoke(delegate { Application.Current.UnhandledException+=UnhandledException; }); } #endregion #regionMethod #regionprotected protectedoverridevoidOnInvoke(ScheduledTasktask) { intnotRunningFeeds=0; this.runningFeeds=0; ShellTiletileToFind=ShellTile.ActiveTiles.FirstOrDefault(x=>x.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathNews_NewsIndexPage)); if(tileToFind!=null&&tileToFind.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathNews_NewsIndexPage)) { this.runningFeeds++; this.HandleNewsTask(task); } else { notRunningFeeds++; } tileToFind=ShellTile.ActiveTiles.FirstOrDefault(x=>x.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathMensa_MensaPage)); if(tileToFind!=null&&tileToFind.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathMensa_MensaPage)) { this.runningFeeds++; this.HandleMensaTask(task); } else { notRunningFeeds++; } tileToFind=ShellTile.ActiveTiles.FirstOrDefault(x=>x.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathEvents_EventsIndexPage)); if(tileToFind!=null&&tileToFind.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathEvents_EventsIndexPage)) { this.runningFeeds++; this.HandleEventTask(task); } else { notRunningFeeds++; } if(notRunningFeeds==3) { BackgroundTasks.StopPerodicTask(Constants.BackgroundTask_BTUCampusApp); } } #endregion #regionprivate privatestaticvoidUnhandledException(objectsender,ApplicationUnhandledExceptionEventArgse) { if(Debugger.IsAttached) { Debugger.Break(); } } privatevoidHandleEventTask(ScheduledTasktask) { if(this.eventModel==null||!this.CheckRssIsUpToDate(this.eventModel.CreateTime)) { HttpRequestapi=newHttpRequest(); Uriurl=newUri(CampusAppWPortalLib8.Resources.Constants.UrlEvents_Addr,UriKind.Absolute); api.HttpGet(url,this.GetEventIsReady); } else { this.runningFeeds--; if(this.runningFeeds==0) { this.NotifyComplete(); } } } privatevoidHandleNewsTask(ScheduledTasktask) { if(this.newsModel==null||!this.CheckRssIsUpToDate(this.newsModel.CreateTime)) { HttpRequestapi=newHttpRequest(); Uriurl=newUri(CampusAppWPortalLib8.Resources.Constants.UrlNews_Addr,UriKind.Absolute); api.HttpGet(url,this.GetNewsIsReady); } else { this.runningFeeds--; if(this.runningFeeds==0) { this.NotifyComplete(); } } } privatevoidGetEventIsReady(objectsender,System.Net.DownloadStringCompletedEventArgsarg) { if(arg.Result!=null) { this.eventModel=XmlManager.DeserializationToModel<RSSViewModel>(arg.Result,CampusAppWPortalLib8.Resources.Constants.XMLRootElementName); this.eventModel.Channel[0].OrderByDate(); this.UpdateEventTile(); } else { this.runningFeeds--; if(this.runningFeeds==0) { this.NotifyComplete(); } } } privatevoidGetNewsIsReady(objectsender,System.Net.DownloadStringCompletedEventArgsarg) { if(arg.Result!=null) { this.newsModel=XmlManager.DeserializationToModel<RSSViewModel>(arg.Result,CampusAppWPortalLib8.Resources.Constants.XMLRootElementName); this.newsModel.Channel[0].OrderByDate(); this.UpdateNewsTile(); } else { this.runningFeeds--; if(this.runningFeeds==0) { this.NotifyComplete(); } } } privatevoidUpdateNewsTile() { ShellTiletileToFind=ShellTile.ActiveTiles.FirstOrDefault(x=>x.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathNews_NewsIndexPage)); if(tileToFind!=null&&tileToFind.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathNews_NewsIndexPage)) { IconicTileDatadata=newIconicTileData(); Randomrandom=newRandom(); RSSModelitem=this.newsModel.Channel[0].Item.FirstOrDefault(); if(item!=null) { data.WideContent1=item.Date; data.WideContent2=DefaultStringManager.ToShortString(item.Title,40,"..."); data.WideContent3=DefaultStringManager.ToShortString(item.Text,40,"..."); tileToFind.Update(data); } this.runningFeeds--; } if(this.runningFeeds==0) { this.NotifyComplete(); if(this.runningFeeds==0) { this.NotifyComplete(); } } } privatevoidUpdateEventTile() { ShellTiletileToFind=ShellTile.ActiveTiles.FirstOrDefault(x=>x.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathEvents_EventsIndexPage)); if(tileToFind!=null&&tileToFind.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathEvents_EventsIndexPage)) { IconicTileDatadata=newIconicTileData(); Randomrandom=newRandom(); RSSModelitem=this.eventModel.Channel[0].Item.FirstOrDefault(); if(item!=null) { data.WideContent1=item.Date; data.WideContent2=DefaultStringManager.ToShortString(item.Title,40,"..."); data.WideContent3=DefaultStringManager.ToShortString(item.Text,40,"..."); tileToFind.Update(data); } this.runningFeeds--; } if(this.runningFeeds==0) { this.NotifyComplete(); } } privateUriCalcMensaUrl(stringmensaTaskDesc) { Uriurl; charfeedNumber=mensaTaskDesc[mensaTaskDesc.Length-1]; switch(feedNumber) { case'1': url=newUri(CampusAppWPortalLib8.Resources.Constants.UrlMensa_Week_CBMain,UriKind.Absolute); break; case'2': url=newUri(CampusAppWPortalLib8.Resources.Constants.UrlMensa_Week_CBSouth,UriKind.Absolute); break; case'3': url=newUri(CampusAppWPortalLib8.Resources.Constants.UrlMensa_Week_SBFMain,UriKind.Absolute); break; case'4': url=newUri(CampusAppWPortalLib8.Resources.Constants.UrlMensa_Week_CBMain,UriKind.Absolute); break; default: url=newUri(CampusAppWPortalLib8.Resources.Constants.UrlMensa_Week_CBMain,UriKind.Absolute); break; } returnurl; } privatevoidHandleMensaTask(ScheduledTasktask) { if(this.mensaModel==null||!this.CheckMensaIsUpToDate(this.mensaModel.CreateTime)) { HttpRequestapi=newHttpRequest(); Uriurl=this.CalcMensaUrl(task.Description); api.HttpGet(url,this.GetMensaIsReady); } else { this.UpdateMensaTile(); } } privatevoidGetMensaIsReady(objectsender,System.Net.DownloadStringCompletedEventArgsarg) { if(arg.Result!=null) { this.mensaModel=XmlManager.DeserializationToModel<MenuWeekModel>(arg.Result,CampusAppWPortalLib8.Resources.Constants.XMLRootElementName); this.UpdateMensaTile(); } else { this.runningFeeds--; if(this.runningFeeds==0) { this.NotifyComplete(); } } } privatevoidUpdateMensaTile() { ShellTiletileToFind=ShellTile.ActiveTiles.FirstOrDefault(x=>x.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathMensa_MensaPage)); if(tileToFind!=null&&tileToFind.NavigationUri.ToString().Contains(CampusAppWPortalLib8.Resources.Constants.PathMensa_MensaPage)) { IconicTileDatadata=newIconicTileData(); DateTimenow=DateTime.Now; intdayIndex=(int)DateTime.Now.DayOfWeek; data.WideContent1=CultureInfo.CurrentCulture.DateTimeFormat.DayNames[dayIndex]; data.WideContent2=now.Date.ToShortDateString(); if(dayIndex==0||dayIndex>this.mensaModel.Menus.Count) { data.WideContent3=AppResources.MensaApp_CloseMensa; } else { //correctindex(weeksartwithmondaynotsunday dayIndex--; intmealCount=this.mensaModel.Menus[dayIndex].Meals.Count; if(mealCount<1) { data.WideContent3=AppResources.MensaApp_CloseMensa; } else { Randomrandom=newRandom(); intrandomNumber=random.Next(0,mealCount); MealModelmeal=this.mensaModel.Menus[dayIndex].Meals[randomNumber]; data.WideContent3=meal.MealName+":"+DefaultStringManager.ToShortString(meal.MealDesc,30,"..."); //data.Count=this.mensaModel.Menus[dayIndex].Meals.Count; } } tileToFind.Update(data); this.runningFeeds--; } if(this.runningFeeds==0) { this.NotifyComplete(); } } privateboolCheckMensaIsUpToDate(DateTimelastModified) { intdiff=lastModified.CompareTo(MenuWeekModel.CalcFirstWeekDay()); if(diff<0) { returnfalse; } returntrue; } privateboolCheckRssIsUpToDate(DateTimelastModified) { intdiff=lastModified.CompareTo(DateTime.Now.AddHours(3)); if(diff<0) { returnfalse; } returntrue; } #endregion #endregion } }