public void Update()
		{
			bool modelsAdded = false;
			lock (HttpContext.Current.Application) {
                if (true)
                { // hack RunCmd("up svn") > 1 && (ConfigurationManager.AppSettings["BlockSvn"] == null)
					DirectoryInfo root = new DirectoryInfo(repoPath);
					foreach (DirectoryInfo usdir in root.GetDirectories().Where(x => x.Name != ".svn")) {
						User u = Global.Db.Users.SingleOrDefault(x => x.Login == usdir.Name);
						if (u != null) {
							List<string> currentModels = new List<string>();
							foreach (DirectoryInfo modeldir in usdir.GetDirectories().Where(x => x.Name != ".svn")) {
								currentModels.Add(modeldir.Name);

								Model m = u.Models.SingleOrDefault(x => x.Name == modeldir.Name);
								if (m != null) {
									DateTime lastWrite = modeldir.LastWriteTimeUtc;
									foreach (DateTime tim in modeldir.GetFiles().Select(x => x.LastWriteTimeUtc)) if (tim > lastWrite) lastWrite = tim;
									if (Math.Abs(lastWrite.Subtract(m.Modified).TotalMinutes) > 3 || m.IsDeleted) {
										Global.AddEvent(EventType.ModelUpdated, null, null, m.ModelID, null, u.UserID);
										m.Modified = lastWrite;
										m.IsDeleted = false;
										m.UpdateIcon();
										UpdateEvents(m.ModelID);
										Global.Db.SubmitChanges();
									}
								} else {
									m = new Model {AuthorUserID = u.UserID, Name = modeldir.Name, Modified = modeldir.LastWriteTimeUtc};
									modelsAdded = true;
									Global.Db.Models.InsertOnSubmit(m);
									Global.Db.SubmitChanges();
									Global.AddEvent(EventType.ModelAdded, null, null, m.ModelID, null, u.UserID);
									Global.Db.SubmitChanges();
									m.UpdateIcon();
									UpdateEvents(m.ModelID);
									Global.Db.SubmitChanges();
								}

							}

							foreach (Model m in u.Models.Where(x => !x.IsDeleted && !currentModels.Contains(x.Name))) {
								m.IsDeleted = true;
								Global.AddEvent(EventType.ModelDeleted, null, null, m.ModelID, null, u.UserID);
							}

							Global.Db.SubmitChanges();
						}
					}
				}
				if (modelsAdded) new ForumController().MakeModelPosts();
			}
		}
Example #2
0
        public void Update()
        {
            bool modelsAdded = false;

            lock (HttpContext.Current.Application) {
                if (true)
                { // hack RunCmd("up svn") > 1 && (ConfigurationManager.AppSettings["BlockSvn"] == null)
                    DirectoryInfo root = new DirectoryInfo(repoPath);
                    foreach (DirectoryInfo usdir in root.GetDirectories().Where(x => x.Name != ".svn"))
                    {
                        User u = Global.Db.Users.SingleOrDefault(x => x.Login == usdir.Name);
                        if (u != null)
                        {
                            List <string> currentModels = new List <string>();
                            foreach (DirectoryInfo modeldir in usdir.GetDirectories().Where(x => x.Name != ".svn"))
                            {
                                currentModels.Add(modeldir.Name);

                                Model m = u.Models.SingleOrDefault(x => x.Name == modeldir.Name);
                                if (m != null)
                                {
                                    DateTime lastWrite = modeldir.LastWriteTimeUtc;
                                    foreach (DateTime tim in modeldir.GetFiles().Select(x => x.LastWriteTimeUtc))
                                    {
                                        if (tim > lastWrite)
                                        {
                                            lastWrite = tim;
                                        }
                                    }
                                    if (Math.Abs(lastWrite.Subtract(m.Modified).TotalMinutes) > 3 || m.IsDeleted)
                                    {
                                        Global.AddEvent(EventType.ModelUpdated, null, null, m.ModelID, null, u.UserID);
                                        m.Modified  = lastWrite;
                                        m.IsDeleted = false;
                                        m.UpdateIcon();
                                        UpdateEvents(m.ModelID);
                                        Global.Db.SubmitChanges();
                                    }
                                }
                                else
                                {
                                    m = new Model {
                                        AuthorUserID = u.UserID, Name = modeldir.Name, Modified = modeldir.LastWriteTimeUtc
                                    };
                                    modelsAdded = true;
                                    Global.Db.Models.InsertOnSubmit(m);
                                    Global.Db.SubmitChanges();
                                    Global.AddEvent(EventType.ModelAdded, null, null, m.ModelID, null, u.UserID);
                                    Global.Db.SubmitChanges();
                                    m.UpdateIcon();
                                    UpdateEvents(m.ModelID);
                                    Global.Db.SubmitChanges();
                                }
                            }

                            foreach (Model m in u.Models.Where(x => !x.IsDeleted && !currentModels.Contains(x.Name)))
                            {
                                m.IsDeleted = true;
                                Global.AddEvent(EventType.ModelDeleted, null, null, m.ModelID, null, u.UserID);
                            }

                            Global.Db.SubmitChanges();
                        }
                    }
                }
                if (modelsAdded)
                {
                    new ForumController().MakeModelPosts();
                }
            }
        }