public async void Run(IBackgroundTaskInstance taskInstance) { BackgroundTaskDeferral deferral = taskInstance.GetDeferral(); ApplicationDataContainer roamingSettings = ApplicationData.Current.RoamingSettings; ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings; resourceLoader = ResourceLoader.GetForViewIndependentUse(); Utilities.LineSerializer lineSerializer = new Utilities.LineSerializer(resourceLoader); //IList<Line> savedLines = await lineSerializer.readLines(); var profile = NetworkInformation.GetInternetConnectionProfile(); NetworkCostType cost = NetworkCostType.Unknown; if (profile != null) { cost = profile.GetConnectionCost().NetworkCostType; } // get secondary tiles var tiles = await SecondaryTile.FindAllForPackageAsync(); if (tiles.Count != 0) { foreach (SecondaryTile tile in tiles) // get data from each tile { string[] tileData = tile.TileId.Split('-'); string[] tileData2 = tile.Arguments.Split('|'); Line line = await lineSerializer.openLine(tileData[1], tileData[2], tileData[3], tileData[4], tileData2[0], tileData2[1]); if (((bool)localSettings.Values["alwaysupdate"] || cost == NetworkCostType.Unrestricted) && line.LastUpdated < DateTime.Today.Date) // update only if necessary { try { await line.updateOn(); } catch (System.Net.Http.HttpRequestException) { deferral.Complete(); return; } line.LastUpdated = DateTime.Today.Date; await lineSerializer.saveLine(line); } Windows.UI.Notifications.TileUpdater updatemngr = null; try { updatemngr = TileUpdateManager.CreateTileUpdaterForSecondaryTile(tile.TileId); } catch (Exception) { deferral.Complete(); return; } if (updatemngr.GetScheduledTileNotifications().Count == 0 || (updatemngr.GetScheduledTileNotifications().Count > 0 && updatemngr.GetScheduledTileNotifications()[0].DeliveryTime < DateTime.Today)) // if scheduled updates are outdated or nonexistent { updatemngr.Clear(); if (!line.Error) { if (line.Buses.Count > 0) { string prevfromtime = ""; bool first = true; for (int i = 0; i < line.Buses.Count; i++) // get Buses from the line { string fromtime, num, from, to; line.Buses[i].TryGetValue("vonalnev", out num); line.Buses[i].TryGetValue("indulasi_ido", out fromtime); line.Buses[i].TryGetValue("indulasi_hely", out from); line.Buses[i].TryGetValue("erkezesi_hely", out to); num = num.Split('|')[0]; if (DateTime.ParseExact(fromtime, "HH:mm", CultureInfo.InvariantCulture) >= DateTime.Now && !(!(bool)roamingSettings.Values["canchange"] && num == " ∙∙∙") && !((bool)roamingSettings.Values["exact"] && ((line.From != from && line.From.Contains(",")) || (line.To != to && line.To.Contains(","))))) { //found = true; string name, totime; #if WINDOWS_UWP name = line.Name; #elif WINDOWS_PHONE_APP name = ""; #endif line.Buses[i].TryGetValue("erkezesi_ido", out totime); XmlDocument xmlDoc = getXML(name, num, fromtime, from, totime, to, false); DateTime showUpdateAt; if (first) { showUpdateAt = DateTime.Now.AddSeconds(1); first = false; } else { showUpdateAt = DateTime.Parse(prevfromtime).AddSeconds(30); } ScheduledTileNotification scheduledUpdate = new ScheduledTileNotification(xmlDoc, new DateTimeOffset(showUpdateAt)); scheduledUpdate.ExpirationTime = new DateTimeOffset(DateTime.Today.AddDays(1).AddHours(1)); updatemngr.AddToSchedule(scheduledUpdate); prevfromtime = fromtime; } } } if (updatemngr.GetScheduledTileNotifications().Count == 0) // if there are no Buses today { try { await line.updateOn(DateTime.Today.AddDays(1)); } catch (System.Net.Http.HttpRequestException) { deferral.Complete(); return; } if (!line.Error && line.Buses.Count > 0) { int i = 0; string num, from, to; do { string fromtime, name, totime; #if WINDOWS_UWP name = line.Name; #elif WINDOWS_PHONE_APP name = ""; #endif line.Buses[i].TryGetValue("erkezesi_ido", out totime); line.Buses[i].TryGetValue("indulasi_ido", out fromtime); line.Buses[i].TryGetValue("vonalnev", out num); line.Buses[i].TryGetValue("indulasi_hely", out from); line.Buses[i].TryGetValue("erkezesi_hely", out to); num = num.Split('|')[0]; if (!(!(bool)roamingSettings.Values["canchange"] && num == " ∙∙∙") && !((bool)roamingSettings.Values["exact"] && ((line.From != from && line.From.Contains(",")) || (line.To != to && line.To.Contains(","))))) { XmlDocument xmlDoc = getXML(name, num, fromtime, from, totime, to, true); DateTime showUpdateAt = DateTime.Now.AddSeconds(1); ScheduledTileNotification scheduledUpdate = new ScheduledTileNotification(xmlDoc, new DateTimeOffset(showUpdateAt)); scheduledUpdate.ExpirationTime = new DateTimeOffset(DateTime.Today.AddDays(1).AddHours(1)); updatemngr.AddToSchedule(scheduledUpdate); } i++; } while (i < line.Buses.Count && ((!(bool)roamingSettings.Values["canchange"] && num == " ∙∙∙") || ((bool)roamingSettings.Values["exact"] && ((line.From != from && line.From.Contains(",")) || (line.To != to && line.To.Contains(",")))))); } } } } } } deferral.Complete(); }
/// <summary> /// Invoked when the application is launched normally by the end user. Other entry points /// will be used such as when the application is launched to open a specific file. /// </summary> /// <param name="e">Details about the launch request and process.</param> protected override async void OnLaunched(LaunchActivatedEventArgs e) { /*if (System.Diagnostics.Debugger.IsAttached) * { * this.DebugSettings.EnableFrameRateCounter = true; * }*/ Frame rootFrame = Window.Current.Content as Frame; #if WINDOWS_UWP if (ApiInformation.IsTypePresent("Windows.UI.Xaml.Media.AcrylicBrush")) { aBrush = new AcrylicBrush() { BackgroundSource = AcrylicBackgroundSource.HostBackdrop, TintOpacity = 0.6 }; if (Application.Current.RequestedTheme == ApplicationTheme.Dark) { ((AcrylicBrush)aBrush).TintColor = (Color)Resources["SystemAccentColorDark2"]; ((AcrylicBrush)aBrush).FallbackColor = (Color)Resources["SystemAccentColorDark2"]; } else { ((AcrylicBrush)aBrush).TintColor = (Color)Resources["SystemAccentColor"]; ((AcrylicBrush)aBrush).FallbackColor = (Color)Resources["SystemAccentColor"]; } } else { aBrush = Resources["SystemControlBackgroundAccentBrush"] as SolidColorBrush; } // title bar customization if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar")) // mobile #endif { var statusBar = StatusBar.GetForCurrentView(); statusBar.ForegroundColor = Colors.White; statusBar.BackgroundOpacity = 0; } #if WINDOWS_UWP if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.ApplicationView")) // PC { CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true; var titleBar = ApplicationView.GetForCurrentView().TitleBar; titleBar.ButtonBackgroundColor = Colors.Transparent; titleBar.ButtonInactiveBackgroundColor = Colors.Transparent; titleBar.ButtonForegroundColor = Colors.White; titleBar.ButtonInactiveForegroundColor = Colors.Gray; } if (AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Xbox") { ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow); } else { ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseVisible); } #endif // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); #if WINDOWS_UWP rootFrame.NavigationFailed += OnNavigationFailed; #elif WINDOWS_PHONE_APP // TODO: change this value to a cache size that is appropriate for your application rootFrame.CacheSize = 1; // Set the default language rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0]; #endif if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; rootFrame.SizeChanged += RootFrame_SizeChanged; } var lineSerializer = new Utilities.LineSerializer(Windows.ApplicationModel.Resources.ResourceLoader.GetForViewIndependentUse()); #if WINDOWS_UWP if (e.PrelaunchActivated == false) #endif { if (e.Arguments == "opensearch") { rootFrame.Navigate(typeof(Search)); rootFrame.BackStack.Clear(); rootFrame.BackStack.Add(new PageStackEntry(typeof(MainPage), null, null)); #if WINDOWS_UWP SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; #endif } else { string[] tileData = e.TileId.Split('-'); // handle secondary tile string[] tileData2 = e.Arguments.Split('|'); if (tileData[0] == "MenetrendApp") { Line line = await lineSerializer.openLine(tileData[1], tileData[2], tileData[3], tileData[4], tileData2[0], tileData2[1]); if (!line.Error) { rootFrame.Navigate(typeof(Results), line); rootFrame.BackStack.Clear(); rootFrame.BackStack.Add(new PageStackEntry(typeof(MainPage), null, null)); #if WINDOWS_UWP SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; #endif } else { rootFrame.Navigate(typeof(MainPage)); } } else { string[] lineData = e.Arguments.Split('-'); //uwp jumplist, wp8 notification if (lineData.Length == 4) { Line line = await lineSerializer.openLine(lineData[0], lineData[1], lineData[2], lineData[3]); if (!line.Error) { rootFrame.Navigate(typeof(Results), line); rootFrame.BackStack.Clear(); rootFrame.BackStack.Add(new PageStackEntry(typeof(MainPage), null, null)); #if WINDOWS_UWP SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; #endif } else { rootFrame.Navigate(typeof(MainPage)); } } } } if (rootFrame.Content == null) { #if WINDOWS_PHONE_APP // Removes the turnstile navigation for startup. if (rootFrame.ContentTransitions != null) { transitions = new Windows.UI.Xaml.Media.Animation.TransitionCollection(); foreach (var c in rootFrame.ContentTransitions) { transitions.Add(c); } } rootFrame.ContentTransitions = null; rootFrame.Navigated += this.RootFrame_FirstNavigated; #endif // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter rootFrame.Navigate(typeof(MainPage), e.Arguments); } // Ensure the current window is active Window.Current.Activate(); } #if WINDOWS_UWP SystemNavigationManager snm = SystemNavigationManager.GetForCurrentView(); snm.BackRequested += (sender, backReqEvArgs) => { if (rootFrame.CanGoBack) { backReqEvArgs.Handled = true; rootFrame.GoBack(); } snm.AppViewBackButtonVisibility = rootFrame.CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed; }; #endif }