diff --git a/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderInfo.cs b/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderInfo.cs index 4ebe0cbfcd..38ca1c773a 100644 --- a/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderInfo.cs @@ -41,5 +41,6 @@ namespace ASC.Files.Core bool CheckAccess(); void InvalidateStorage(); + void UpdateTitle(string newtitle); } } \ No newline at end of file diff --git a/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoBase.cs index 8d6960729e..ce5ff13c82 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoBase.cs @@ -85,8 +85,11 @@ namespace ASC.Files.Thirdparty.Box } public void Dispose() - { - BoxProviderInfo.Dispose(); + { + if (BoxProviderInfo != null) + { + BoxProviderInfo.Dispose(); + } } protected string MappingID(string id, bool saveIfNotExist = false) diff --git a/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoSelector.cs index 13eefcb03d..6f5ddce7ef 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Box/BoxDaoSelector.cs @@ -29,8 +29,6 @@ using System; using ASC.Common; using ASC.Files.Core; using ASC.Files.Core.Security; - -using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Thirdparty.Box { @@ -63,27 +61,8 @@ namespace ASC.Files.Thirdparty.Box { return base.GetSecurityDao(id); } - - public override string GetIdCode(string id) - { - if (id != null) - { - var match = Selector.Match(id); - if (match.Success) - { - return match.Groups["id"].Value; - } - } - return base.GetIdCode(id); - } - - public override void RenameProvider(BoxProviderInfo boxProviderInfo, string newTitle) - { - var dbDao = ServiceProvider.GetService(); - dbDao.UpdateProviderInfo(boxProviderInfo.ID, newTitle, null, boxProviderInfo.RootFolderType); - boxProviderInfo.UpdateTitle(newTitle); //This will update cached version too - } } + public static class BoxDaoSelectorExtention { public static DIHelper AddBoxDaoSelectorService(this DIHelper services) diff --git a/products/ASC.Files/Server/Core/Thirdparty/Box/BoxProviderInfo.cs b/products/ASC.Files/Server/Core/Thirdparty/Box/BoxProviderInfo.cs index 187d93f953..e25c1751bf 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Box/BoxProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Box/BoxProviderInfo.cs @@ -135,7 +135,7 @@ namespace ASC.Files.Thirdparty.Box CacheReset(); } - internal void UpdateTitle(string newtitle) + public void UpdateTitle(string newtitle) { CustomerTitle = newtitle; } diff --git a/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoBase.cs index eca69d0e54..b8bc40185f 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoBase.cs @@ -85,8 +85,11 @@ namespace ASC.Files.Thirdparty.Dropbox } public void Dispose() - { - DropboxProviderInfo.Dispose(); + { + if (DropboxProviderInfo != null) + { + DropboxProviderInfo.Dispose(); + } } protected string MappingID(string id, bool saveIfNotExist = false) diff --git a/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoSelector.cs index 2783406645..eb0c6ec714 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxDaoSelector.cs @@ -25,13 +25,10 @@ using System; -using System.Globalization; using ASC.Common; using ASC.Files.Core; using ASC.Files.Core.Security; - -using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Thirdparty.Dropbox { @@ -64,27 +61,6 @@ namespace ASC.Files.Thirdparty.Dropbox { return base.GetSecurityDao(id); } - - public override string GetIdCode(string id) - { - if (id != null) - { - var match = Selector.Match(Convert.ToString(id, CultureInfo.InvariantCulture)); - if (match.Success) - { - return match.Groups["id"].Value; - } - throw new ArgumentException("Id is not a Dropbox id"); - } - return base.GetIdCode(id); - } - - public override void RenameProvider(DropboxProviderInfo dropboxProviderInfo, string newTitle) - { - var dbDao = ServiceProvider.GetService(); - dbDao.UpdateProviderInfo(dropboxProviderInfo.ID, newTitle, null, dropboxProviderInfo.RootFolderType); - dropboxProviderInfo.UpdateTitle(newTitle); //This will update cached version too - } } public static class DropboxDaoSelectorExtention diff --git a/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxProviderInfo.cs b/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxProviderInfo.cs index 09c5385ebe..60cafb10e7 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Dropbox/DropboxProviderInfo.cs @@ -118,7 +118,7 @@ namespace ASC.Files.Thirdparty.Dropbox CacheReset(); } - internal void UpdateTitle(string newtitle) + public void UpdateTitle(string newtitle) { CustomerTitle = newtitle; } diff --git a/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs index c475ec1fdd..c586c03c9c 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs @@ -92,7 +92,10 @@ namespace ASC.Files.Thirdparty.GoogleDrive public void Dispose() { - GoogleDriveProviderInfo.Dispose(); + if (GoogleDriveProviderInfo != null) + { + GoogleDriveProviderInfo.Dispose(); + } } protected string MappingID(string id, bool saveIfNotExist = false) diff --git a/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoSelector.cs index f48d99c5b5..0234362913 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveDaoSelector.cs @@ -30,8 +30,6 @@ using ASC.Common; using ASC.Files.Core; using ASC.Files.Core.Security; -using Microsoft.Extensions.DependencyInjection; - namespace ASC.Files.Thirdparty.GoogleDrive { internal class GoogleDriveDaoSelector : RegexDaoSelectorBase, IDaoSelector @@ -62,26 +60,6 @@ namespace ASC.Files.Thirdparty.GoogleDrive { return base.GetSecurityDao(id); } - - public override string GetIdCode(string id) - { - if (id != null) - { - var match = Selector.Match(id); - if (match.Success) - { - return match.Groups["id"].Value; - } - } - return base.GetIdCode(id); - } - - public override void RenameProvider(GoogleDriveProviderInfo googleDriveProviderInfo, string newTitle) - { - var dbDao = ServiceProvider.GetService(); - dbDao.UpdateProviderInfo(googleDriveProviderInfo.ID, newTitle, null, googleDriveProviderInfo.RootFolderType); - googleDriveProviderInfo.UpdateTitle(newTitle); //This will update cached version too - } } public static class GoogleDriveDaoSelectorExtention diff --git a/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveProviderInfo.cs b/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveProviderInfo.cs index 61d0bc69fd..629297e385 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/GoogleDrive/GoogleDriveProviderInfo.cs @@ -148,7 +148,7 @@ namespace ASC.Files.Thirdparty.GoogleDrive CacheReset(); } - internal void UpdateTitle(string newtitle) + public void UpdateTitle(string newtitle) { CustomerTitle = newtitle; } diff --git a/products/ASC.Files/Server/Core/Thirdparty/IDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/IDaoSelector.cs index 6edbcb32f4..730abe9d93 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/IDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/IDaoSelector.cs @@ -24,12 +24,14 @@ */ +using System; + using ASC.Files.Core; using ASC.Files.Core.Security; namespace ASC.Files.Thirdparty { - internal interface IDaoSelector + internal interface IDaoSelector : IDisposable { bool IsMatch(string id); IFileDao GetFileDao(string id); diff --git a/products/ASC.Files/Server/Core/Thirdparty/IThirdPartyProviderDao.cs b/products/ASC.Files/Server/Core/Thirdparty/IThirdPartyProviderDao.cs new file mode 100644 index 0000000000..37912850cf --- /dev/null +++ b/products/ASC.Files/Server/Core/Thirdparty/IThirdPartyProviderDao.cs @@ -0,0 +1,12 @@ +using System; + +using ASC.Files.Core; +using ASC.Files.Core.Thirdparty; + +namespace ASC.Files.Thirdparty +{ + internal interface IThirdPartyProviderDao : IDisposable where T : class, IProviderInfo + { + void Init(BaseProviderInfo t1, RegexDaoSelectorBase selectorBase); + } +} diff --git a/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs index 8c96c08236..0743793bc7 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs @@ -84,7 +84,10 @@ namespace ASC.Files.Thirdparty.OneDrive public void Dispose() { - OneDriveProviderInfo.Dispose(); + if (OneDriveProviderInfo != null) + { + OneDriveProviderInfo.Dispose(); + } } protected string MappingID(string id, bool saveIfNotExist = false) diff --git a/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoSelector.cs index 1ce8961b92..12e5d81887 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveDaoSelector.cs @@ -29,8 +29,6 @@ using System; using ASC.Common; using ASC.Files.Core; using ASC.Files.Core.Security; - -using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Thirdparty.OneDrive { @@ -63,27 +61,6 @@ namespace ASC.Files.Thirdparty.OneDrive { return base.GetSecurityDao(id); } - - public override string GetIdCode(string id) - { - if (id != null) - { - var match = Selector.Match(id); - if (match.Success) - { - return match.Groups["id"].Value; - } - } - return base.GetIdCode(id); - } - - - public override void RenameProvider(OneDriveProviderInfo onedriveProviderInfo, string newTitle) - { - var dbDao = ServiceProvider.GetService(); - dbDao.UpdateProviderInfo(onedriveProviderInfo.ID, newTitle, null, onedriveProviderInfo.RootFolderType); - onedriveProviderInfo.UpdateTitle(newTitle); //This will update cached version too - } } public static class OneDriveDaoSelectorExtention diff --git a/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveProviderInfo.cs b/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveProviderInfo.cs index 1132cf4f04..8120a2c4a4 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/OneDrive/OneDriveProviderInfo.cs @@ -119,10 +119,11 @@ namespace ASC.Files.Thirdparty.OneDrive CacheReset(); } - internal void UpdateTitle(string newtitle) + public void UpdateTitle(string newtitle) { CustomerTitle = newtitle; } + internal Item GetOneDriveItem(string itemId) { return OneDriveProviderInfoHelper.GetOneDriveItem(Storage, ID, itemId); diff --git a/products/ASC.Files/Server/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index 81259351d0..c83961b111 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -263,8 +263,7 @@ namespace ASC.Files.Thirdparty.ProviderDao public void Dispose() { - //TODO - //throw new NotImplementedException(); + Selectors.ForEach(r => r.Dispose()); } } diff --git a/products/ASC.Files/Server/Core/Thirdparty/RegexDaoSelectorBase.cs b/products/ASC.Files/Server/Core/Thirdparty/RegexDaoSelectorBase.cs index a10bb2d87e..c8513e6d74 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/RegexDaoSelectorBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/RegexDaoSelectorBase.cs @@ -25,6 +25,7 @@ using System; +using System.Collections.Generic; using System.Text.RegularExpressions; using ASC.Files.Core; @@ -35,7 +36,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Thirdparty { - internal abstract class RegexDaoSelectorBase : IDaoSelector, IDisposable where T : class, IProviderInfo + internal abstract class RegexDaoSelectorBase : IDaoSelector where T : class, IProviderInfo { public IServiceProvider ServiceProvider { get; } public IDaoFactory DaoFactory { get; } @@ -43,6 +44,8 @@ namespace ASC.Files.Thirdparty protected internal abstract string Name { get; } protected internal abstract string Id { get; } + private Dictionary> Providers { get; set; } + protected RegexDaoSelectorBase( IServiceProvider serviceProvider, IDaoFactory daoFactory) @@ -50,6 +53,7 @@ namespace ASC.Files.Thirdparty ServiceProvider = serviceProvider; DaoFactory = daoFactory; Selector = new Regex(@"^" + Id + @"-(?'id'\d+)(-(?'path'.*)){0,1}$", RegexOptions.Singleline | RegexOptions.Compiled); + Providers = new Dictionary>(); } public virtual string ConvertId(string id) @@ -71,9 +75,17 @@ namespace ASC.Files.Thirdparty } } - public virtual string GetIdCode(string id) + public string GetIdCode(string id) { - return null; + if (id != null) + { + var match = Selector.Match(id); + if (match.Success) + { + return match.Groups["id"].Value; + } + } + throw new ArgumentException($"Id is not a {Name} id"); } public virtual bool IsMatch(string id) @@ -103,10 +115,14 @@ namespace ASC.Files.Thirdparty private T1 GetDao(string id) where T1 : IThirdPartyProviderDao { + if (Providers.ContainsKey(id)) return (T1)Providers[id]; + var res = ServiceProvider.GetService(); res.Init(GetInfo(id), this); + Providers.Add(id, res); + return res; } @@ -130,7 +146,12 @@ namespace ASC.Files.Thirdparty throw new ArgumentException($"Id is not {Name} id"); } - public abstract void RenameProvider(T provider, string newTitle); + public void RenameProvider(T provider, string newTitle) + { + var dbDao = ServiceProvider.GetService(); + dbDao.UpdateProviderInfo(provider.ID, newTitle, null, provider.RootFolderType); + provider.UpdateTitle(newTitle); //This will update cached version too + } protected virtual T GetProviderInfo(int linkId) { @@ -147,13 +168,10 @@ namespace ASC.Files.Thirdparty public void Dispose() { - //TODO - //throw new NotImplementedException(); + foreach (var p in Providers) + { + p.Value.Dispose(); + } } } - - internal interface IThirdPartyProviderDao where T : class, IProviderInfo - { - void Init(BaseProviderInfo t1, RegexDaoSelectorBase selectorBase); - } } \ No newline at end of file diff --git a/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoBase.cs index 030d91f8d9..e321decdde 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoBase.cs @@ -207,5 +207,13 @@ namespace ASC.Files.Thirdparty.SharePoint { return MappingID(id, false); } + + public void Dispose() + { + if (ProviderInfo != null) + { + ProviderInfo.Dispose(); + } + } } } diff --git a/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoSelector.cs index b535f652ec..c76afc37d8 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointDaoSelector.cs @@ -30,8 +30,6 @@ using ASC.Common; using ASC.Files.Core; using ASC.Files.Core.Security; -using Microsoft.Extensions.DependencyInjection; - namespace ASC.Files.Thirdparty.SharePoint { internal class SharePointDaoSelector : RegexDaoSelectorBase, IDaoSelector @@ -76,26 +74,6 @@ namespace ASC.Files.Thirdparty.SharePoint } return base.ConvertId(null); } - - public override string GetIdCode(string id) - { - if (id != null) - { - var match = Selector.Match(id); - if (match.Success) - { - return match.Groups["id"].Value; - } - } - return base.GetIdCode(id); - } - - public override void RenameProvider(SharePointProviderInfo sharePointProviderInfo, string newTitle) - { - var dbDao = ServiceProvider.GetService(); - dbDao.UpdateProviderInfo(sharePointProviderInfo.ID, newTitle, null, sharePointProviderInfo.RootFolderType); - sharePointProviderInfo.UpdateTitle(newTitle); //This will update cached version too - } } public static class SharePointDaoSelectorExtention diff --git a/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs b/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs index f22f938563..233209e588 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs @@ -95,7 +95,7 @@ namespace ASC.Files.Thirdparty.SharePoint SharePointProviderInfoHelper.Invalidate(); } - internal void UpdateTitle(string newtitle) + public void UpdateTitle(string newtitle) { CustomerTitle = newtitle; } diff --git a/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs b/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs index 6fee5da664..d077398713 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs @@ -571,5 +571,13 @@ namespace ASC.Files.Thirdparty.Sharpbox var staticText = match.Value.Substring(string.Format(" ({0})", index).Length); return string.Format(" ({0}){1}", index + 1, staticText); } + + public void Dispose() + { + if (SharpBoxProviderInfo != null) + { + SharpBoxProviderInfo.Dispose(); + } + } } } \ No newline at end of file diff --git a/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoSelector.cs b/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoSelector.cs index 4ca06f8c45..5c23582386 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoSelector.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxDaoSelector.cs @@ -30,8 +30,6 @@ using ASC.Common; using ASC.Files.Core; using ASC.Files.Core.Security; -using Microsoft.Extensions.DependencyInjection; - namespace ASC.Files.Thirdparty.Sharpbox { internal class SharpBoxDaoSelector : RegexDaoSelectorBase, IDaoSelector @@ -63,26 +61,6 @@ namespace ASC.Files.Thirdparty.Sharpbox { return base.GetSecurityDao(id); } - - public override string GetIdCode(string id) - { - if (id != null) - { - var match = Selector.Match(id); - if (match.Success) - { - return match.Groups["id"].Value; - } - } - return base.GetIdCode(id); - } - - public override void RenameProvider(SharpBoxProviderInfo sharpBoxProviderInfo, string newTitle) - { - var dbDao = ServiceProvider.GetService(); - dbDao.UpdateProviderInfo(sharpBoxProviderInfo.ID, newTitle, null, sharpBoxProviderInfo.RootFolderType); - sharpBoxProviderInfo.UpdateTitle(newTitle); //This will update cached version too - } } public static class SharpBoxDaoSelectorExtention diff --git a/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxProviderInfo.cs b/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxProviderInfo.cs index e06700b05a..03e70257db 100644 --- a/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxProviderInfo.cs +++ b/products/ASC.Files/Server/Core/Thirdparty/Sharpbox/SharpBoxProviderInfo.cs @@ -79,7 +79,7 @@ namespace ASC.Files.Thirdparty.Sharpbox get => Wrapper.Storage != null && Wrapper.Storage.IsOpened; } - internal void UpdateTitle(string newtitle) + public void UpdateTitle(string newtitle) { CustomerTitle = newtitle; }