public User CreateTimetable(string name) { var record = new TimetableRecord { // Name = name, CreationDate = DateTime.Now, UserRecord = UserRecord }; // Добавить ассоциации UserRecord.TimetableRecord.Add(record); Manager.Container.TimetableRecordSet.Add(record); return(this); }
public void addPair(Pair pair, bool saveState = true) { /*WeekTimetable week; * var p_weekType = WeekTimetable.GetIso8601WeekNumber (pair.day.Date) % 2 == 0 ? WeekType.Even : WeekType.Odd; * week = currentWeek.weekType == p_weekType ? currentWeek : nextWeek; * */ using (var db = new SQLiteConnection(db_path)) { var pr = new TimetableRecord(); pr.weekType = WeekTimetable.GetIso8601WeekNumber(pair.day.Date) % 2 == 0?WeekType.Even:WeekType.Odd; pr.day = pair.day.DayOfWeek; pr.startTime = pair.startTime; pr.endTime = pair.endTime; pr.name = pair.name; pr.lecturer = pair.lecturer; pr.location = pair.location; pr.room = pair.room; pr.edited = pair.edited?1:0; pr.deleted = pair.deleted?1:0; pr.initial_hash = pair.initial_hash; pr.hash = pair.hash; Debug.LogWarning("ADDING PAIR: " + pair.name + " DELETED: " + pr.deleted); db.Insert(pr); db.Close(); // NEW PAIR IN DB NOW restoreTimetableFromDatabase(); if (saveState) { saveCurrentState(); } } }
internal Timetable(DatabaseManager man, TimetableRecord timetableRecord) : base(man) { TimetableRecord = timetableRecord; }
private bool saveTimetableToDatabase(WeekTimetable w1, WeekTimetable w2, bool preserveEdits = false) { bool anyChanges = false; // var start_t = Time.realtimeSinceStartup; if (!preserveEdits) { anyChanges = true; // simply remove all pairs from db and add provided clearDb(); using (var db = new SQLiteConnection(db_path)) { foreach (var w in new List <WeekTimetable>() { w1, w2 }) { Debug.LogWarning("Saving week of type " + w.weekType); foreach (var d in w.days) { foreach (var p in d.pairs) { var pair = new TimetableRecord(); pair.weekType = w.weekType; pair.day = d.day.DayOfWeek; pair.startTime = p.startTime; pair.endTime = p.endTime; pair.name = p.name; pair.lecturer = p.lecturer; pair.location = p.location; pair.room = p.room; pair.edited = p.edited ? 1 : 0; pair.deleted = p.deleted ? 1 : 0; pair.initial_hash = p.initial_hash; pair.hash = p.hash; db.Insert(pair); } } } db.Close(); //Debug.LogWarning ("Timetable saved to database ("+(Time.renderedFrameCount-start_t)+"s)"); } } else { // foreach exisiting pair check for similar (with hash) in new pairs // if found - dont add new pair // if not found remove (real remove) existing pair // Then add other new pairs var old_weeks = new List <WeekTimetable>() { currentWeek, nextWeek }; var new_weeks = new List <WeekTimetable>() { w1, w2 }; // create one list with all existing pairs var exisitingPairs = new List <Pair>(); foreach (var ex_w in old_weeks) { foreach (var d in ex_w.days) { foreach (var p in d.pairs) { exisitingPairs.Add(p); } } } // create another list with all new pairs var newPairs = new List <Pair>(); foreach (var new_w in new_weeks) { foreach (var d in new_w.days) { foreach (var new_p in d.pairs) { newPairs.Add(new_p); } } } // v1.3 hash migration if (exisitingPairs.Where(x => x.hash == null).Count() > 0) { // needs migration //Debug.LogError ("Needs v1.3 pair migration"); for (int i = 0; i < 2; i++) { var old_w = old_weeks [i]; var new_w = new_weeks [i]; var old_w_pairs = new List <Pair>(); foreach (var d in old_w.days) { foreach (var p in d.pairs) { old_w_pairs.Add(p); } } var new_w_pairs = new List <Pair>(); foreach (var d in new_w.days) { foreach (var new_p in d.pairs) { new_w_pairs.Add(new_p); } } foreach (var ex_p in old_w_pairs) { if (ex_p.hash == null) { //Debug.LogError ("Found null hash"); // pair needs migration if (ex_p.edited) { // than needs more work: // if its the only pair on this week with such hash if (old_w_pairs.Where(x => x.initial_hash == ex_p.initial_hash).Count() == 1) { // try to find in new pairs pair with same initial_hash var new_pairs_with_same_initial_hash = new_w_pairs.Where( x => ex_p.initial_hash == x.initial_hash ).ToList(); if (new_pairs_with_same_initial_hash.Count > 0) { //Debug.LogWarning ("Found similar pair in new data for migration"); // than take this new pair and calculate old pair's hash using it var new_pair = new_pairs_with_same_initial_hash [0]; ex_p.hash = new_pair.hash; } else { //Debug.LogError ("Cant find similar (initila_hash) pair in new data"); // in this case cant restore // than replace it with new pairs on update } } else { //Debug.LogError ("Pair is not single on this week"); // cant restore - replace on update } } else { // just calculate new hash if (ex_p.deleted) { //Debug.LogWarning ("Set new hash for deleted pair"); } ex_p.hash = TimetableParser.GetPairMD5(ex_p.day.DayOfWeek, ex_p.time, ex_p.name, ex_p.location, ex_p.lecturer, old_w.weekType); } } else { //Debug.LogError ("HASH IS NOT NULL!"); } } } } // foreach existing pair check if it stays or not foreach (var ex_p in exisitingPairs) { if (ex_p.hash == null) { Debug.LogError("Exisiting pair hash is null!"); } if (newPairs.FindAll(x => x.hash == ex_p.hash).Count == 0) { // no such pair in new data - delete it from our local data removePair(ex_p, immediateSaveToDB: false); anyChanges = true; } else { // found such pair in new data // remove it from list of new data newPairs.RemoveAll(x => x.hash == ex_p.hash); } } // save our removals to DB saveTimetableToDatabase(currentWeek, nextWeek); // add rest of new data foreach (var new_p in newPairs) { addPair(new_p, saveState: false); // adds directly to db anyChanges = true; } // done saving new data } return(anyChanges); }