/// <summary>
        /// Called when the item is a repeat item.
        /// </summary>
        /// <param name="target">The object that was passed to IParseItem.Visit.</param>
        /// <returns>The passed target or a modification of it.</returns>
        /// <exception cref="System.ArgumentNullException">If target is null.</exception>
        public IParseItem Visit(RepeatItem target)
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            ILGenerator gen = compiler.CurrentGenerator;

            target.Break.UserData = target.Break.UserData ?? gen.DefineLabel();
            Label start = gen.DefineLabel();
            Label end   = (Label)target.Break.UserData;

            // start:
            gen.MarkLabel(start);

            // {Block}
            target.Block.Accept(this);

            // if (!{Exp}.IsTrue) goto start;
            target.Expression.Accept(this);
            gen.Emit(OpCodes.Callvirt, typeof(ILuaValue).GetProperty(nameof(ILuaValue.IsTrue)).GetGetMethod());
            gen.Emit(OpCodes.Brfalse, start);

            // end:
            gen.MarkLabel(end);

            return(target);
        }
Beispiel #2
0
        public JobViewModel(RepeatItem <Job> repeatjob)
        {
            Description   = repeatjob.Item.Description;
            StartTime     = repeatjob.StartTime;
            IsRepeat      = true;
            Frequence     = repeatjob.Frequence;
            FrequenceUnit = repeatjob.FrequenceUnit;
            JobName       = repeatjob.Item.JobName;

            this.Id = repeatjob.Item.Id;

            this.CodeId = repeatjob.Item.CodeId;
        }
Beispiel #3
0
        public IParseItem Visit(RepeatItem target)
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            target.Expression.Accept(this);

            using (_tree.Block(true)) {
                _tree.DefineLabel(target.Break);
                target.Block.Accept(this);
            }

            return(target);
        }
Beispiel #4
0
        public void ExecuteRepeatingJob(RepeatItem <Job> repeatingJob)
        {
            if (repeatingJob != null && repeatingJob.Item != null)
            {
                try
                {
                    var website = Kooboo.Data.GlobalDb.WebSites.Get(repeatingJob.Item.WebSiteId);

                    if (website != null)
                    {
                        RenderContext context = new RenderContext();
                        context.WebSite = website;

                        var sitedb = website.SiteDb();

                        var code = sitedb.Code.Get(repeatingJob.Item.CodeId);

                        if (code != null)
                        {
                            Manager.ExecuteCode(context, code.Body, code.Id);
                        }
                        else
                        {
                            AddJobLog(repeatingJob.Item.JobName, false, DateTime.Now, repeatingJob.Item.WebSiteId, "Job code not found");
                            return;
                        }
                    }
                    else
                    {
                        // not needed, since no website no where to show...
                    }

                    AddJobLog(repeatingJob.Item.JobName, true, DateTime.Now, repeatingJob.Item.WebSiteId, "");
                }
                catch (Exception ex)
                {
                    AddJobLog(repeatingJob.Item.JobName, false, DateTime.Now, repeatingJob.Item.WebSiteId, ex.Message);
                }
            }
        }
Beispiel #5
0
 private void ExecuteRepeatingJob(RepeatItem <Job> repeatingJob)
 {
     if (repeatingJob != null && repeatingJob.Item != null)
     {
         try
         {
             var job = JobContainer.GetJob(repeatingJob.Item.JobName);
             if (job == null)
             {
                 AddJobLog(repeatingJob.Item.JobName, null, false, DateTime.Now, repeatingJob.Item.WebSiteId, "job not found, name: " + repeatingJob.Item.JobName);
             }
             else
             {
                 job.Execute(repeatingJob.Item.WebSiteId, repeatingJob.Item.Config);
                 AddJobLog(repeatingJob.Item.JobName, repeatingJob.Item.Description, true, DateTime.Now, repeatingJob.Item.WebSiteId, "");
             }
         }
         catch (Exception ex)
         {
             AddJobLog(repeatingJob.Item.JobName, repeatingJob.Item.Description, false, DateTime.Now, repeatingJob.Item.WebSiteId, ex.Message);
         }
     }
 }
Beispiel #6
0
        public void Post(JobEditViewModel model, ApiCall call)
        {
            //JobEditViewModel model = call.Context.Request.Model as JobEditViewModel;

            Job newjob = new Job();

            newjob.Description = model.Description;
            newjob.JobName     = model.Name;
            newjob.WebSiteId   = call.Context.WebSite.Id;
            newjob.Script      = model.Script;
            newjob.CodeId      = model.CodeId;

            // add a new job.
            if (model.IsRepeat)
            {
                RepeatItem <Job> repeatjob = new RepeatItem <Job>();
                repeatjob.Item          = newjob;
                repeatjob.StartTime     = model.StartTime;
                repeatjob.FrequenceUnit = model.FrequenceUnit;

                switch (model.Frequence.ToLower())
                {
                case "month":
                {
                    repeatjob.Frequence = RepeatFrequence.Month;
                    break;
                }

                case "day":
                {
                    repeatjob.Frequence = RepeatFrequence.Day;
                    break;
                }

                case "minutes":
                {
                    repeatjob.Frequence = RepeatFrequence.Minutes;
                    break;
                }

                case "minute":
                {
                    repeatjob.Frequence = RepeatFrequence.Minutes;
                    break;
                }

                case "second":
                {
                    repeatjob.Frequence = RepeatFrequence.Second;
                    break;
                }

                case "week":
                {
                    repeatjob.Frequence = RepeatFrequence.Week;
                    break;
                }

                case "hour":
                {
                    repeatjob.Frequence = RepeatFrequence.Hour;
                    break;
                }

                default:
                    break;
                }

                GlobalDb.RepeatingJob().Add(repeatjob);
                GlobalDb.RepeatingJob().Close();
            }
            else
            {
                GlobalDb.ScheduleJob().Add(newjob, model.StartTime);
                GlobalDb.ScheduleJob().Close();
            }
        }