void ProcessUncommited(ISignal<UncommitedEventStream> signal) { var uncommited = signal.Payload; var root = uncommited.Root; if (!uncommited.Events.Any()) { signal.Return(new IDomainEvent[0]); return; } var last = _storage.LoadLast(root.Id); var toCommit = uncommited.Events; var commited = new List<IDomainEvent>(); var targetVersion = last != null ? last.TargetVersion + last.Events.Count : 0; var currentVersion = targetVersion; foreach (var ev in toCommit) { if (currentVersion != ev.Version) { throw new ConcurrencyException(signal.Payload.Root, ev); } commited.Add(ev); currentVersion++; } var commitId = last != null ? last.Id + 1 : 0; var snapshot = last != null ? last.Snapshot : null; var snapshotId = last != null ? last.SnapshotId : null; if (root is ISnapshotEnabled && last != null && ShouldBuildSnapshot(last)) { snapshot = (root as ISnapshotEnabled).BuildSnapshot(); snapshotId = commitId; } if (commited.Any()) { var commit = new Commit( commitId, root.Id, targetVersion, commited, snapshotId, snapshot ); _storage.Store(commit); } signal.Return(uncommited.Events); }
private void OnNewReleases(object sender, RoutedEventArgs e) { _atlasViewMode = AtlasViewMode.NewReleasesView; //Clear the playlist selection. NavigationControl navigationControl = (NavigationControl)sender; navigationControl.SelectPlaylist(null); OnPlaylistSelectionChanged(navigationControl, e); List<NewReleaseItem> newsItems = new List<NewReleaseItem>(); //Add artists that have new releases. //System.Threading.Tasks.Task.Run(() => { AlbumType filter = AlbumType.Album | AlbumType.Single; DateTime cutoff = DateTime.Now.AddMonths(-3); //TODO: Data-drive this setting. int maxSuggestions = 1; //TODO: Data-drive this setting. FollowedArtistList followedArtists = SpotifyCacheService.GetFollowedArtists(); foreach (Artist followedArtist in followedArtists.ArtistItems.Items) { //Find if there's any new content available from this artist. AlbumInfoList albums = SpotifyClientService.Client.GetArtistAlbums(followedArtist, filter); foreach (AlbumInfo album in albums.Items) { //if (_userCache.SeenNewsItem(album.ID)) continue; Album albumInfo = SpotifyClientService.Client.GetAlbum(album); if (albumInfo.ReleaseDate > cutoff) { newsItems.Add(new NewReleaseItem(followedArtist, albumInfo)); if (newsItems.Count >= maxSuggestions) break; } else { //Assume that albums are returned by Spotify by release date, descending. //If we miss the cutoff, skip out. break; } } } if (newsItems.Any()) { Dispatcher.Invoke(() => { //Display a popup. //this.NewsFeedPopup.DataContext = new NewsFeedViewModel(newsItems, userCache); //this.NewsFeedPopup.Width = this.RenderSize.Width * 0.8; //this.NewsFeedPopup.Height = this.RenderSize.Height * 0.8; //this.NewsFeedPopup.IsOpen = true; }); } } //); AtlasViewOptions viewOptions = new AtlasViewOptions(0); this.AtlasView.ViewModel.CreateNewReleaseHierarchy(newsItems.ToList().AsReadOnly(), viewOptions); this.AtlasView.UpdateNetwork(); }
public ActionResult UpdateCashdrawList(string idstr) { if (!string.IsNullOrEmpty(idstr)) { var str = idstr.TrimEnd(','); md_cashdraw_app_Bll cashdrawBll = new md_cashdraw_app_Bll(); md_docter_Bll doctorBll = new md_docter_Bll(); List<md_cashdraw_app> cashdrawlist = cashdrawBll.GetCashdrawByIds(str); string error = string.Empty; foreach (var item in cashdrawlist) { item.opstatus = (int)Model.ConfigClass.CashdrawStatus.已处理; ///批注By Andy:更新一次就调用一次数据库连接,对数据库性能有影响,建议传入需要更新的ids,用update语句一次执行 } cashdrawBll.UpdateChashdrawList(cashdrawlist, out error); var doctorids = cashdrawlist.Select(m => m.drid).Distinct().ToList(); var doctorlist = doctorBll.GetDoctorByIds(doctorids); List<md_docter> doctors = new List<md_docter>(); List<md_dr_account> dr_accountlist = new List<md_dr_account>(); foreach (var item in doctorlist) { var list = cashdrawlist.Where(m => m.drid == item.pkid.ToString()).ToList(); if (list.Any()) { var money = list.Select(m => m.drawmoney).Sum(); item.current_income -= money; doctors.Add(item); md_dr_account accountinfo = new md_dr_account(); accountinfo.Initial(); accountinfo.dr_id = item.pkid; accountinfo.income_type = 0; accountinfo.money = money; dr_accountlist.Add(accountinfo); } } if (doctors.Any()) { doctorBll.UpdateChashdrawList(doctors, out error); } if (dr_accountlist.Any()) { new md_account_Bll().CreateAccountList(dr_accountlist, out error); } } return View(); }
public int getSeriesId(string seriesName) { // TODO: A few things here. We should add more intelligence when there is more then 1 match // Things like default to (US) or (UK) or what ever is usally the case. Also, perhaps a global setting that would always take newest series first... if (this.IsSeriesIgnored(seriesName)) { return 0; } if (this.seriesIDMapping.Keys.Contains(seriesName, StringComparer.InvariantCultureIgnoreCase)) { var seriesid = this.seriesIDMapping[seriesName]; log.DebugFormat("SD-TvDb: Direct mapping: series: {0} id: {1}", seriesName, seriesid); return seriesid; } if (seriesCache.Keys.Contains(seriesName, StringComparer.InvariantCultureIgnoreCase)) { log.DebugFormat("SD-TvDb: Series cache hit: {0} has id: {1}", seriesName, seriesCache[seriesName]); return seriesCache[seriesName]; } string searchSeries = seriesName; if (IsSeriesInMappedSeries(seriesName)) { searchSeries = this.seriesNameMapping[seriesName]; } else if (this.seriesNameRegex.Count > 0) { foreach (string regexEntry in seriesNameRegex.Keys) { var regex = new Regex(regexEntry); if (regex.IsMatch(seriesName)) { if (seriesNameRegex[regexEntry].StartsWith("replace=")) { searchSeries = regex.Replace(seriesName, seriesNameRegex[regexEntry].Substring(8)); } else if (seriesNameRegex[regexEntry].StartsWith("id=")) { return int.Parse(seriesNameRegex[regexEntry].Substring(3)); } else { searchSeries = seriesNameRegex[regexEntry]; } log.DebugFormat("SD-TvDb: Regex mapping: series: {0} regex: {1} seriesMatch: {2}", seriesName, regexEntry, searchSeries); break; } } } List<TvdbSearchResult> searchResults = this.tvDbService.SearchSeries(searchSeries, this.language); log.DebugFormat("SD-TvDb: Search for {0} return {1} results", searchSeries, searchResults.Count); var seriesWithoutPunctuation = Regex.Replace(searchSeries, REMOVE_PUNCTUATION, string.Empty); if (searchResults.Count >= 1) { for (int i = 0; i < searchResults.Count; i++) { var sn = new List<string> { Regex.Replace(searchResults[i].SeriesName, REMOVE_PUNCTUATION, string.Empty) }; sn.AddRange(searchResults[i].AliasNames.Select(x => Regex.Replace(x, REMOVE_PUNCTUATION, string.Empty))); if (sn.Any(x => x.Equals(seriesWithoutPunctuation, StringComparison.InvariantCultureIgnoreCase))) { var seriesId = searchResults[i].Id; log.DebugFormat("SD-TvDb: series: {0} id: {1}", searchSeries, seriesId); seriesCache.Add(seriesName, seriesId); return seriesId; } } log.DebugFormat("SD-TvDb: Could not find series match: {0} renamed {1}", seriesName, searchSeries); } log.DebugFormat("Cannot find series ID for {0}", seriesName); return 0; }
/// <summary> /// list of courses /// timetable /// /// for each course in the list of courses /// try to fit this course in the timetable /// fit is found: /// fit course in a copy of the timetable /// make a copy of the list of courses and remove the reference to this course (shallow) /// call this method with the copied list and timetable /// fit is not found: /// try the next course in the list of courses /// </summary> private bool FitCourses(List<Course> courses, Timetable timetable) { int before = GeneratedTables.Count; if (courses.Any()) { foreach (Course course in courses) { // TODO: optimise for speed by combining check and actually fitting if (timetable.CanFit(course)) { // Clone the list of courses left to fit List<Course> coursesLeft = (List<Course>)courses.Clone(); // Remove the course that's going to be fitted from this cloned list coursesLeft.Remove(course); // Clone the timetable Timetable newTimetable = (Timetable)timetable.Clone(); // Fit the course in the cloned timetable newTimetable.Fit(course); // Try to fit the remaining courses FitCourses(coursesLeft, newTimetable); } } } else { bool added = GeneratedTables.Add(timetable); string output = String.Format("Item was added? {0}", added); Console.Out.WriteLine(output); } return before < GeneratedTables.Count; }
/// <summary> /// Handler for <see cref="Page.OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs)" />. /// </summary> /// <param name="parameter"><see cref="Windows.UI.Xaml.Navigation.NavigationEventArgs.Parameter" />.</param> public async void Activate(object parameter) { string lsActivityID = parameter as string; MSHealthActivities loActivities = null; MSHealthSplitDistanceType loDistanceType = MSHealthSplitDistanceType.None; MSHealthActivityInclude loInclude = MSHealthActivityInclude.Details | MSHealthActivityInclude.MapPoints; IsLoaded = false; Activity = null; TotalDistance = null; DistanceUnitShort = null; Pace = null; Splits = null; HeartRateZones = null; MapPath = null; ElevationGain = null; ElevationLoss = null; MaxElevation = null; MinElevation = null; IsElevationAvailable = false; IsHeartRateZonesAvailable = false; IsNikePlusAvailable = false; List<HeartRateZoneItem> loHeartRateZones = null; // Set back button visible (for Windows app) SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible; // Check parameter (Activity ID) if (!string.IsNullOrEmpty(lsActivityID)) { IsRunningRequest = true; // Determine Distance Unit switch (Settings.MSHealthFilterDistance) { case DistanceUnit.DISTANCE_MILE: loDistanceType = MSHealthSplitDistanceType.Mile; DistanceUnitShort = Resources.Strings.TextDistanceUnitShortMileText; break; case DistanceUnit.DISTANCE_KILOMETER: loDistanceType = MSHealthSplitDistanceType.Kilometer; DistanceUnitShort = Resources.Strings.TextDistanceUnitShortKilometerText; break; } try { // Get Activity details loActivities = await moMSHealthClient.ListActivities(ids: lsActivityID, include: loInclude, splitDistanceType: loDistanceType); // Check Activity details returned if (loActivities.ItemCount > 0) { // Map from derivated activities to single instance activity if (loActivities.FreePlayActivities != null && loActivities.FreePlayActivities.Any()) Activity = loActivities.FreePlayActivities.FirstOrDefault(); else if (loActivities.RunActivities != null && loActivities.RunActivities.Any()) Activity = loActivities.RunActivities.FirstOrDefault(); else if (loActivities.BikeActivities != null && loActivities.BikeActivities.Any()) Activity = loActivities.BikeActivities.FirstOrDefault(); else if (loActivities.GolfActivities != null && loActivities.GolfActivities.Any()) Activity = loActivities.GolfActivities.FirstOrDefault(); else if (loActivities.GuidedWorkoutActivities != null && loActivities.GuidedWorkoutActivities.Any()) Activity = loActivities.GuidedWorkoutActivities.FirstOrDefault(); else if (loActivities.SleepActivities != null && loActivities.SleepActivities.Any()) Activity = loActivities.SleepActivities.FirstOrDefault(); else if (loActivities.HikeActivities != null && loActivities.HikeActivities.Any()) Activity = loActivities.HikeActivities.FirstOrDefault(); } // Check current activity instance if (Activity != null) { // Calculate Total Distance if (Activity.SplitDistance != null && Activity.SplitDistance.HasValue && Activity.SplitDistance.Value > 0 && Activity.DistanceSummary != null && Activity.DistanceSummary.TotalDistance != null && Activity.DistanceSummary.TotalDistance.HasValue) { TotalDistance = (decimal)Activity.DistanceSummary.TotalDistance / (decimal)Activity.SplitDistance; } // Calculate Pace if (Activity.DistanceSummary != null && Activity.DistanceSummary.Pace != null && Activity.DistanceSummary.Pace.HasValue) { Pace = TimeSpan.FromMilliseconds((double)Activity.DistanceSummary.Pace); } // Calculate Elevation if (Activity.DistanceSummary != null) { // Elevation Gain if (Activity.DistanceSummary.ElevationGain != null) { ElevationGain = (double)Activity.DistanceSummary.ElevationGain / MSHealthDistanceSummary.ELEVATION_FACTOR; IsElevationAvailable = true; } // Elevation Loss if (Activity.DistanceSummary.ElevationLoss != null) { ElevationLoss = (double)Activity.DistanceSummary.ElevationLoss / MSHealthDistanceSummary.ELEVATION_FACTOR; IsElevationAvailable = true; } // Max Elevation if (Activity.DistanceSummary.MaxElevation != null) { MaxElevation = (double)Activity.DistanceSummary.MaxElevation / MSHealthDistanceSummary.ELEVATION_FACTOR; IsElevationAvailable = true; } // Min Elevation if (Activity.DistanceSummary.MinElevation != null) { MinElevation = (double)Activity.DistanceSummary.MinElevation / MSHealthDistanceSummary.ELEVATION_FACTOR; IsElevationAvailable = true; } } // Heart Rate Zones if (Activity.PerformanceSummary != null && Activity.PerformanceSummary.HeartRateZones != null) { loHeartRateZones = new List<HeartRateZoneItem>(); // Underhealthy loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_UNDER_HEALTHY, Name = Resources.Strings.TextHeartRateZoneUnderHealthyText, Value = Activity.PerformanceSummary.HeartRateZones.UnderHealthyHeart ?? 0, }); // Healthy loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_HEALTHY, Name = Resources.Strings.TextHeartRateZoneHealthyText, Value = Activity.PerformanceSummary.HeartRateZones.HealthyHeart ?? 0, }); // Fitness loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_FITNESS, Name = Resources.Strings.TextHeartRateZoneFitnessText, Value = Activity.PerformanceSummary.HeartRateZones.FitnessZone ?? 0, }); // Aerobic loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_AEROBIC, Name = Resources.Strings.TextHeartRateZoneAerobicText, Value = Activity.PerformanceSummary.HeartRateZones.Aerobic ?? 0, }); // Anaerobic loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_ANAEROBIC, Name = Resources.Strings.TextHeartRateZoneAnaerobicText, Value = Activity.PerformanceSummary.HeartRateZones.Anaerobic ?? 0, }); // Redline loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_REDLINE, Name = Resources.Strings.TextHeartRateZoneRedlineText, Value = Activity.PerformanceSummary.HeartRateZones.Redline ?? 0, }); // OverRedline loHeartRateZones.Add(new HeartRateZoneItem() { Key = HeartRateZoneItem.HRZONE_OVER_REDLINE, Name = Resources.Strings.TextHeartRateZoneOverRedlineText, Value = Activity.PerformanceSummary.HeartRateZones.OverRedline ?? 0, }); HeartRateZones = new ObservableCollection<HeartRateZoneItem>(loHeartRateZones); IsHeartRateZonesAvailable = true; } // Segments (splits) if (Activity.ActivitySegments != null && Activity.ActivitySegments.Any() && TotalDistance != null) { // ActivitySegment to Split double ldSplitValue = 0; List<SplitItem> loSplits = new List<SplitItem>(); foreach (MSHealthActivitySegment loSegment in Activity.ActivitySegments.OrderBy(loSeg => loSeg.StartTime)) { ldSplitValue++; loSplits.Add(new SplitItem() { Value = ldSplitValue > (double)TotalDistance.Value ? (double)TotalDistance.Value : ldSplitValue, Duration = loSegment.Duration.Value, AvgHeartRate = loSegment.HeartRateSummary != null ? loSegment.HeartRateSummary.AverageHeartRate.Value : 0, }); } // Get Max/Min Duration/HR, for complete splits only try { loSplits.Where(loSplit => (loSplit.Value % 1) == 0).OrderBy(loSplit => loSplit.Duration).First().DurationMark = "↓"; loSplits.Where(loSplit => (loSplit.Value % 1) == 0).OrderByDescending(loSplit => loSplit.Duration).First().DurationMark = "↑"; loSplits.Where(loSplit => (loSplit.Value % 1) == 0).OrderBy(loSplit => loSplit.AvgHeartRate).First().HRMark = "↓"; loSplits.Where(loSplit => (loSplit.Value % 1) == 0).OrderByDescending(loSplit => loSplit.AvgHeartRate).First().HRMark = "↑"; } catch { /* Do nothing */ } // Sort by value and assign to instance loSplits = loSplits.OrderBy(loSplit => loSplit.Value).ToList(); Splits = new ObservableCollection<SplitItem>(loSplits); } // MapPoints to MapPath if (Activity.MapPoints != null && Activity.MapPoints.Any()) { List<BasicGeoposition> loGeopositions = new List<BasicGeoposition>(); loGeopositions = (from loMapPoint in Activity.MapPoints .Where(loPoint => loPoint.Location != null && loPoint.Location.Latitude != null && loPoint.Location.Longitude != null) .OrderBy(loPoint => loPoint.Ordinal) select new BasicGeoposition() { Latitude = (double)loMapPoint.Location.Latitude / MSHealthGPSPoint.LATITUDE_FACTOR, Longitude = (double)loMapPoint.Location.Longitude / MSHealthGPSPoint.LONGITUDE_FACTOR, Altitude = loMapPoint.Location.ElevationFromMeanSeaLevel != null ? ((double)loMapPoint.Location.ElevationFromMeanSeaLevel / MSHealthGPSPoint.ELEVATION_FACTOR) : 0d, }).ToList(); //foreach (var loMapPoint in Activity.MapPoints) //{ // if (loMapPoint.Location != null && // loMapPoint.Location.Latitude != null && // loMapPoint.Location.Longitude != null) // { // loGeopositions.Add(new BasicGeoposition() // { // Latitude = (double)loMapPoint.Location.Latitude / 10000000d, // Longitude = (double)loMapPoint.Location.Longitude / 10000000d, // }); // } //} if (loGeopositions.Any()) { MapPath = new Geopath(loGeopositions); } } } } catch (Exception loException) { // Handle exceptions (just for debugging purposes) if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debug.WriteLine(loException.StackTrace); await moDialogService.ShowError(Resources.Strings.MessageContentErrorOperation, Resources.Strings.MessageTitleError, Resources.Strings.MessageButtonOK, null); // Return to main page moNavigationService.GoBack(); } finally { Messenger.Default.Send<Geopath>(MapPath); IsRunningRequest = false; } // Check for Nike+ Credentials if (Settings.NikePlusCredential != null) { if (!System.Text.RegularExpressions.Regex.IsMatch(Settings.NikePlusCredential.Password, "[\"&`'<>]")) { try { // Check for GPS data if (Activity.MapPoints == null || !Activity.MapPoints.Any()) { // Get Minute Summaries loActivities = await moMSHealthClient.ListActivities(ids: lsActivityID, include: MSHealthActivityInclude.MinuteSummaries, splitDistanceType: loDistanceType); // Check Activity details returned if (loActivities.ItemCount > 0) { // Map from derivated activities to single instance activity if (loActivities.FreePlayActivities != null && loActivities.FreePlayActivities.Any()) Activity.MinuteSummaries = loActivities.FreePlayActivities.FirstOrDefault().MinuteSummaries; else if (loActivities.RunActivities != null && loActivities.RunActivities.Any()) Activity.MinuteSummaries = loActivities.RunActivities.FirstOrDefault().MinuteSummaries; else if (loActivities.BikeActivities != null && loActivities.BikeActivities.Any()) Activity.MinuteSummaries = loActivities.BikeActivities.FirstOrDefault().MinuteSummaries; else if (loActivities.GolfActivities != null && loActivities.GolfActivities.Any()) Activity.MinuteSummaries = loActivities.GolfActivities.FirstOrDefault().MinuteSummaries; else if (loActivities.GuidedWorkoutActivities != null && loActivities.GuidedWorkoutActivities.Any()) Activity.MinuteSummaries = loActivities.GuidedWorkoutActivities.FirstOrDefault().MinuteSummaries; else if (loActivities.SleepActivities != null && loActivities.SleepActivities.Any()) Activity.MinuteSummaries = loActivities.SleepActivities.FirstOrDefault().MinuteSummaries; } } } catch (Exception loException) { // Handle exceptions (just for debugging purposes) if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debug.WriteLine(loException.StackTrace); } // Ensure Activity either has GPS or MinuteSummaries data if ((Activity.MapPoints != null && Activity.MapPoints.Any()) || (Activity.MinuteSummaries != null && Activity.MinuteSummaries.Any())) { moNikePlusClient.SetCredentials(Settings.NikePlusCredential.UserName, Settings.NikePlusCredential.Password); IsNikePlusAvailable = true; } } } IsLoaded = true; } }