Files
Umbraco-CMS/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ScriptRepository.cs

91 lines
2.8 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.IO;
2017-12-07 16:45:25 +01:00
using System.Linq;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Persistence.Repositories;
using Umbraco.Extensions;
2017-12-07 16:45:25 +01:00
namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement
2017-12-07 16:45:25 +01:00
{
/// <summary>
/// Represents the Script Repository
/// </summary>
internal class ScriptRepository : FileRepository<string, IScript>, IScriptRepository
2017-12-07 16:45:25 +01:00
{
public ScriptRepository(FileSystems fileSystems)
2018-07-20 09:49:05 +02:00
: base(fileSystems.ScriptsFileSystem)
2017-12-07 16:45:25 +01:00
{
}
#region Implementation of IRepository<string,Script>
public override IScript Get(string id)
2017-12-07 16:45:25 +01:00
{
// get the relative path within the filesystem
// (though... id should be relative already)
var path = FileSystem.GetRelativePath(id);
if (FileSystem.FileExists(path) == false)
return null;
// content will be lazy-loaded when required
var created = FileSystem.GetCreated(path).UtcDateTime;
var updated = FileSystem.GetLastModified(path).UtcDateTime;
//var content = GetFileContent(path);
var script = new Script(path, file => GetFileContent(file.OriginalPath))
{
//id can be the hash
Id = path.GetHashCode(),
Key = path.EncodeAsGuid(),
//Content = content,
CreateDate = created,
UpdateDate = updated,
VirtualPath = FileSystem.GetUrl(path)
};
// reset dirty initial properties (U4-1946)
script.ResetDirtyProperties(false);
return script;
}
public override void Save(IScript entity)
2017-12-07 16:45:25 +01:00
{
// TODO: Casting :/ Review GetFileContent and it's usages, need to look into it later
var script = (Script) entity;
base.Save(script);
2017-12-07 16:45:25 +01:00
// ensure that from now on, content is lazy-loaded
if (script.GetFileContent == null)
script.GetFileContent = file => GetFileContent(file.OriginalPath);
2017-12-07 16:45:25 +01:00
}
public override IEnumerable<IScript> GetMany(params string[] ids)
2017-12-07 16:45:25 +01:00
{
//ensure they are de-duplicated, easy win if people don't do this as this can cause many excess queries
ids = ids.Distinct().ToArray();
if (ids.Any())
{
foreach (var id in ids)
{
yield return Get(id);
}
}
else
{
var files = FindAllFiles("", "*.*");
foreach (var file in files)
{
yield return Get(file);
}
}
}
#endregion
}
}