コード例 #1
0
        public async Task <IActionResult> OnGetAsync(int?id, string jobType)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var items = dataContext.Jobs.Where(x => x.Id == id);

            if (jobType == "HikDownloader")
            {
                items = items.Include(x => x.HardDriveStatuses)
                        .Include("HardDriveStatuses.Camera")
                        .Include(x => x.Photos)
                        .Include(x => x.Videos);
            }
            else
            {
                items = items
                        .Include(x => x.DeletedFiles)
                        .Include("DeletedFiles.Camera");
            }

            Job = await items.FirstOrDefaultAsync();

            if (Job == null)
            {
                return(NotFound());
            }
            return(Page());
        }
コード例 #2
0
ファイル: UnitOfWork.cs プロジェクト: zanderphh/HikConsole
        public async Task <int> SaveChangesAsync(HikJob job, Camera camera)
        {
            this.ProcessAuditItems(job, camera);
            var res = await this.SaveChangesAsync();

            return(res);
        }
コード例 #3
0
ファイル: UnitOfWork.cs プロジェクト: zanderphh/HikConsole
 private void ProcessAuditItems(HikJob job, Camera camera)
 {
     foreach (var entity in this.Context.ChangeTracker
              .Entries()
              .Where(e => e.State == EntityState.Modified || e.State == EntityState.Added)
              .Select(e => e.Entity)
              .OfType <IAuditable>())
     {
         entity.Job    = job;
         entity.Camera = camera;
     }
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: zanderphh/HikConsole
        static void Main(string[] args)
        {
            var       container = AppBootstrapper.ConfigureIoc();
            AppConfig appConfig = container.Resolve <IHikConfig>().Config;
            ILogger   logger    = container.Resolve <ILogger>();

            logger.Info(appConfig.ToString());

            var job = new HikJob
            {
                Started = DateTime.Now,
                JobType = nameof(HikDownloader),
            };

            var config = new ConfigurationBuilder()
                         .SetBasePath(AssemblyDirectory)
                         .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                         .Build();

            var uowf = new UnitOfWorkFactory(config.GetConnectionString("HikConnectionString"));

            using (var unitOfWork = uowf.CreateUnitOfWork())
            {
                var jobRepo = unitOfWork.GetRepository <HikJob>();
                jobRepo.Add(job).GetAwaiter().GetResult();
                unitOfWork.SaveChangesAsync().GetAwaiter().GetResult();
            }

            var downloader = container.Resolve <HikDownloader>(new TypedParameter(typeof(AppConfig), appConfig));

            job.Finished = DateTime.Now;
            var result = downloader.DownloadAsync().GetAwaiter().GetResult();

            logger.Info("Save to DB...");
            var jobResultSaver = new JobService(uowf, job, result);

            jobResultSaver.SaveAsync().GetAwaiter().GetResult();
            logger.Info("Save to DB. Done!");

            if (appConfig.Mode == "Recurring")
            {
                logger.Info("Starting Recurring");
                var interval = appConfig.Interval * 60 * 1000;
                using (Timer timer = new Timer(async(o) => await downloader.DownloadAsync(), null, interval, interval))
                {
                    WaitForExit();
                    downloader?.Cancel();
                }
            }

            WaitForExit();
        }
コード例 #5
0
 public JobService(IUnitOfWorkFactory factory, HikJob job, JobResult result)
 {
     this.factory = factory;
     this.job     = job;
     this.result  = result;
 }