public BlogService(IBlogRepository blogRepository, MarkdownTransformer markdownTransformer, RazorTransformer razorTransformer, IAdminRepository adminRepository)
 {
     _blogRepository      = blogRepository;
     _markdownTransformer = markdownTransformer;
     _razorTransformer    = razorTransformer;
     _adminRepository     = adminRepository;
 }
        public void AddContent(IContentTransformer transformer, IContentSource source, byte[] content)
        {
            ITransformerStoreModel currentTransformer = GetTransformer(transformer, source);

            string contentFileName = $"{Guid.NewGuid():N}.bin";
            string contentFilePath = Path.Combine(_storeContentDirectoryName, currentTransformer.Id.ToString(), contentFileName);
            int    contentHash     = BitConverter.ToInt32(new MD5CryptoServiceProvider().ComputeHash(content), 0);

            try
            {
                lock (_dbConnection)
                {
                    if (ExistContent(currentTransformer.Id, contentHash))
                    {
                        return;
                    }

                    _dbConnection.Execute($"INSERT INTO Contents (TransformerId, Created, ContentHash, ContentFileName) VALUES ({currentTransformer.Id}, '{DateTime.Now:yyyy-MM-dd hh:mm:ss}', '{contentHash}', '{contentFileName}')");

                    File.WriteAllBytes(contentFilePath, content);
                }
            }
            catch
            {
                if (File.Exists(contentFilePath))
                {
                    File.Delete(contentFilePath);
                }
            }
        }
        public void Init()
        {
            TransformerCatalog transformerCatalog = TransformerCatalog.TryLoad();

            foreach (TransformerConfig transformerConfig in transformerCatalog.Transformers)
            {
                Type transformerType = Type.GetType(transformerConfig.TypeName);

                if (transformerType == null)
                {
                    throw new Exception($"The type '{transformerConfig.TypeName}' was not found.");
                }
                if (!typeof(IContentTransformer).IsAssignableFrom(transformerType))
                {
                    throw new Exception($"The type '{transformerType.FullName}' is not assignable to type '{typeof(IContentTransformer).FullName}'.");
                }

                IContentTransformer transformer = (IContentTransformer)_container.Resolve(transformerType);
                if (transformerConfig.ContentSource == null || string.IsNullOrEmpty(transformerConfig.ContentSource.Name))
                {
                    throw new Exception($"The transformer '{transformerType.Name}' does not have any content source.");
                }
                IContentSource source = _contentSourceService.Build(transformerConfig.ContentSource.Name);
                source.Init(transformerConfig.ContentSource.Config);

                ITransformerStoreModel transformerStoreModel = _contentTransformerStorage.AddOrGetTransformer(transformer, source);
                _transformerProcessors.Add(transformerStoreModel.Id, new TransformerProcessor(_contentTransformerStorage, transformer, source));
            }
        }
예제 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PostTranslator"/> class.
 /// </summary>
 /// <param name="authData"></param>
 public PostTranslator(ICatiAuthDataLayer authData, IContentTransformer contentTransformer, ICatiImageDataLayer imageDataLayer, IImageUploader uploader)
 {
     this.authDataLayer      = authData;
     this.contentTransformer = contentTransformer;
     this.imageDataLayer     = imageDataLayer;
     this.uploader           = uploader;
 }
 public TransformerProcessor(IContentTransformerStorage storage, IContentTransformer transformer, IContentSource source)
 {
     _storage               = storage;
     _transformer           = transformer;
     _source                = source;
     _source.SourceChanged += SourceChanged;
     _source.Start();
 }
        public ITransformerStoreModel AddOrGetTransformer(IContentTransformer transformer, IContentSource source)
        {
            ITransformerStoreModel currentTransformer = _transformers.Find(model => model.TransformerType == transformer.GetType().FullName&& model.SourceIdentity == source.Identity);

            if (currentTransformer != null)
            {
                return(currentTransformer);
            }

            _dbConnection.Execute($"INSERT INTO Transformers (Created, Name, TransformerType, SourceIdentity) VALUES ('{DateTime.Now:yyyy-MM-dd hh:mm:ss}', '{transformer.GetType().Assembly.GetName().Name}', '{transformer.GetType().FullName}', '{source.Identity}')");

            TransformerStoreModel transformerStoreModel = (TransformerStoreModel)GetTransformer(transformer, source);

            Directory.CreateDirectory(Path.Combine(_storeContentDirectoryName, transformerStoreModel.Id.ToString()));
            _transformers.Add(transformerStoreModel);
            return(transformerStoreModel);
        }
예제 #7
0
 /// <summary>
 /// Initializes the post controller.
 /// </summary>
 /// <param name="datalayer">The data layer.</param>
 public PostController(ICatiDataLayer datalayer, IContentTransformer contentTransformer)
 {
     this.datalayer          = datalayer;
     this.contentTransformer = contentTransformer;
 }
예제 #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AdminPostController"/> class.
 /// </summary>
 /// <param name="catiDataLayer">The cati data layer.</param>
 /// <param name="contentTransformer">The content transformer.</param>
 public AdminPostController(ICatiDataLayer catiDataLayer, IContentTransformer contentTransformer)
 {
     this.catiDatalayer      = catiDataLayer;
     this.contentTransformer = contentTransformer;
 }
        private ITransformerStoreModel GetTransformer(IContentTransformer transformer, IContentSource source)
        {
            TransformerStoreModel currentTransformer = _transformers.FirstOrDefault(x => x.TransformerType == transformer.GetType().FullName&& x.SourceIdentity == source.Identity);

            return(currentTransformer ?? _dbConnection.QueryFirst <TransformerStoreModel>($"SELECT * FROM Transformers WHERE TransformerType='{transformer.GetType().FullName}' AND SourceIdentity='{source.Identity}'"));
        }
 private bool ExistTransformer(IContentTransformer transformer, IContentSource source)
 {
     return(_dbConnection.QuerySingleOrDefault <bool>($"SELECT 1 FROM Transformers WHERE TransformerType='{transformer.GetType().FullName}' AND SourceIdentity='{source.Identity}'"));
 }
예제 #11
0
 public void RegisterModifier(IContentTransformer modifier)
 {
     ContentModifiers.Add(modifier);
 }
예제 #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AdminMarkdownController"/> class.
 /// </summary>
 /// <param name="contentTransformer">The content transformer.</param>
 public AdminMarkdownController(IContentTransformer contentTransformer)
 {
     this.contentTransformer = contentTransformer;
 }
예제 #13
0
 /// <summary>
 /// Creates a default post translator instance.
 /// </summary>
 /// <param name="authdata">The auth data retreiver.</param>
 /// <param name="transformer">The content transformer.</param>
 /// <param name="imageDataLayer">The image data layer.</param>
 /// <param name="imageUploader">The image uploader.</param>
 /// <returns>The post translator.</returns>
 public static IPostTranslator Create(ICatiAuthDataLayer authdata, IContentTransformer transformer, ICatiImageDataLayer imageDataLayer, IImageUploader imageUploader)
 {
     return(new PostTranslator(authdata, transformer, imageDataLayer, imageUploader));
 }