public static void DeleteDiskFolder(string FullPath, SiteDb SiteDb) { string nonroutable = DiskPathService.GetNonRoutableFolder(FullPath); if (!string.IsNullOrEmpty(nonroutable)) { // delete all routable.. var repo = SiteDb.GetRepository(nonroutable); if (repo != null) { var all = repo.All(); foreach (var item in all) { repo.Delete(item.Id); } } } else { // delete all. var relative = DiskPathService.GetRelativeUrl(SiteDb.WebSite, FullPath); if (!string.IsNullOrEmpty(relative)) { relative = relative.ToLower(); if (!relative.EndsWith("/")) { relative = relative + "/"; } List <Route> routesToRemove = new List <Route>(); foreach (var item in SiteDb.Routes.All()) { if (item.Name.ToLower().StartsWith(relative)) { routesToRemove.Add(item); } } foreach (var item in routesToRemove) { if (item.objectId != default(Guid)) { var repo = SiteDb.GetRepository(item.DestinationConstType); repo.Delete(item.objectId); SiteDb.Routes.Delete(item.Id); } } } } }
public static void DiskFolderRename(SiteDb sitedb, string oldFolder, string NewFolder) { string nonroutable = DiskPathService.GetNonRoutableFolder(NewFolder); if (!string.IsNullOrEmpty(nonroutable)) { return; } string oldrelative = DiskPathService.GetRelativeUrl(sitedb.WebSite, oldFolder); string newrelative = DiskPathService.GetRelativeUrl(sitedb.WebSite, NewFolder); if (!oldrelative.EndsWith("/")) { oldrelative = oldrelative + "/"; } if (!newrelative.EndsWith("/")) { newrelative = newrelative + "/"; } var loweroldrelative = oldrelative.ToLower(); var lowernewrelative = newrelative.ToLower(); List <Route> ChangeRoutes = new List <Route>(); foreach (var item in sitedb.Routes.All()) { if (item.Name.StartsWith(loweroldrelative, StringComparison.OrdinalIgnoreCase)) { ChangeRoutes.Add(item); } } int oldlen = loweroldrelative.Length; foreach (var item in ChangeRoutes) { string newroute = newrelative + item.Name.Substring(oldlen); sitedb.Routes.ChangeRoute(item.Name, newroute); } }
public static void DiskFileRename(SiteDb SiteDb, string OldPath, string NewPath) { NonRoutableObject NonRoutable = null; IRepository repo = null; NonRoutable = DiskPathService.GetNonRoutableObject(OldPath); if (NonRoutable != null) { var NewNonRoutable = DiskPathService.GetNonRoutableObject(NewPath); if (NewNonRoutable != null && !string.IsNullOrEmpty(NonRoutable.Name) && !string.IsNullOrEmpty(NewNonRoutable.Name)) { repo = SiteDb.GetRepository(NonRoutable.StoreName); var siteobject = repo?.GetByNameOrId(NonRoutable.Name); if (siteobject == null) { return; } var oldid = siteobject.Id; siteobject.Name = NewNonRoutable.Name; siteobject.Id = default(Guid); repo.Delete(oldid); repo.AddOrUpdate(siteobject); } } else { string OldRelative = DiskPathService.GetRelativeUrl(SiteDb.WebSite, OldPath); string NewRelative = DiskPathService.GetRelativeUrl(SiteDb.WebSite, NewPath); if (!string.IsNullOrEmpty(OldRelative) && !string.IsNullOrEmpty(NewRelative)) { SiteDb.Routes.ChangeRoute(OldRelative, NewRelative); } } }
public void DeleteFromDb(string DiskFullPath, SiteDb sitedb) { var NonRoutable = DiskPathService.GetNonRoutableObject(DiskFullPath); if (NonRoutable != null) { var repo = sitedb.GetRepository(NonRoutable.StoreName); string name = string.IsNullOrWhiteSpace(NonRoutable.Name) ? NonRoutable.Id.ToString() : NonRoutable.Name; var result = repo.GetByNameOrId(name) as ISiteObject; if (result != null) { this.SyncMediator.AcquireDbLock(result.Id); repo.Delete(result.Id); this.SyncMediator.ReleaseDbLock(result.Id); } } else { var RelativeUrl = DiskPathService.GetRelativeUrl(sitedb.WebSite, DiskFullPath); var route = sitedb.Routes.GetByUrl(RelativeUrl); if (route != null) { var repo = sitedb.GetRepository(route.DestinationConstType); if (repo != null) { var result = repo.Get(route.objectId) as ISiteObject; if (result != null) { this.SyncMediator.AcquireDbLock(result.Id); repo.Delete(result.Id); this.SyncMediator.ReleaseDbLock(result.Id); } } } } }
public void SyncToDb(string FullPath, SiteDb SiteDb, byte[] diskbytes = null, bool logSync = true) { if (diskbytes == null) { diskbytes = this.ReadAllBytes(FullPath); } if (diskbytes == null) { return; } if (this.SyncMediator.IsContentHashLock(FullPath, diskbytes)) { return; } //if (!this.SyncMediator.CheckAndAcquireDiskLock(FullPath, diskbytes)) //{ // return; //} string OldRelativeUrl = null; string RelativeUrl = null; IRepository repo = null; ISiteObject result = null; Routing.Route route = null; string NameFromFile = null; string extension = UrlHelper.FileExtension(FullPath); if (!string.IsNullOrEmpty(extension) && !extension.StartsWith(".")) { extension = "." + extension; } if (!string.IsNullOrEmpty(extension)) { extension = extension.ToLower(); } var NonRoutable = DiskPathService.GetNonRoutableObject(FullPath); if (NonRoutable != null) { repo = SiteDb.GetRepository(NonRoutable.StoreName); NameFromFile = NonRoutable.Name; string name = string.IsNullOrWhiteSpace(NonRoutable.Name) ? NonRoutable.Id.ToString() : NonRoutable.Name; if (!string.IsNullOrEmpty(NonRoutable.Extension)) { extension = NonRoutable.Extension.ToLower(); if (!extension.StartsWith(".")) { extension = "." + extension; } } result = repo.GetByNameOrId(name) as ISiteObject; if (result == null) { if (name.ToLower().EndsWith(extension)) { name = name.Substring(0, name.Length - extension.Length); result = repo.GetByNameOrId(name); } else { name = name + extension; result = repo.GetByNameOrId(name); } } } else { OldRelativeUrl = DiskPathService.GetRelativeUrl(SiteDb.WebSite, FullPath); RelativeUrl = Kooboo.Sites.Helper.RouteHelper.ToValidRoute(OldRelativeUrl); route = SiteDb.Routes.GetByUrl(RelativeUrl); if (route != null) { repo = SiteDb.GetRepository(route.DestinationConstType); result = repo.Get(route.objectId) as ISiteObject; } else { var ModelType = Service.ConstTypeService.GetModelTypeByUrl(RelativeUrl); if (ModelType == null) { return; } repo = SiteDb.GetRepository(ModelType); } NameFromFile = UrlHelper.FileName(RelativeUrl); } if (result == null) { result = Activator.CreateInstance(repo.ModelType) as ISiteObject; } if (!CheckAssignObject(ref result, diskbytes)) { return; } if (result is IExtensionable) { var extensionfile = result as IExtensionable; extensionfile.Extension = extension; } if (string.IsNullOrEmpty(result.Name)) { result.Name = Lib.Helper.StringHelper.ToValidFileName(NameFromFile); } if (!string.IsNullOrEmpty(RelativeUrl)) { SiteDb.Routes.AddOrUpdate(RelativeUrl, result as SiteObject); } if (!isSameName(result.Name, NameFromFile, extension) || OldRelativeUrl != RelativeUrl) { if (File.Exists(FullPath)) { this.SyncMediator.AbsoluteLock(FullPath); File.Delete(FullPath); this.SyncMediator.LockDisk3Seconds(FullPath); this.SyncMediator.ReleaseAbsoluteLock(FullPath); } repo.AddOrUpdate(result); } else { this.SyncMediator.AcquireDbLock(result.Id); repo.AddOrUpdate(result); this.SyncMediator.ReleaseDbLock(result.Id); } if (logSync) { var coreobject = result as CoreObject; SiteDb.Synchronization.AddOrUpdate(new Synchronization { SyncSettingId = SiteDb.Synchronization.DiskSyncSettingId, ObjectId = coreobject.Id, Version = coreobject.Version, StoreName = repo.StoreName }); } }