├── src ├── version.txt ├── Demo.Quartz3.DotNetCore │ ├── wwwroot │ │ ├── js │ │ │ ├── site.min.js │ │ │ └── site.js │ │ ├── favicon.ico │ │ ├── css │ │ │ └── site.min.css │ │ └── lib │ │ │ └── jquery │ │ │ └── .bower.json │ ├── .bowerrc │ ├── Pages │ │ ├── _ViewStart.cshtml │ │ ├── _ViewImports.cshtml │ │ ├── About.cshtml │ │ ├── Index.cshtml.cs │ │ ├── Contact.cshtml.cs │ │ ├── About.cshtml.cs │ │ ├── Contact.cshtml │ │ └── Error.cshtml.cs │ ├── appsettings.json │ ├── appsettings.Development.json │ ├── bower.json │ ├── Demo.Quartz3.DotNetCore.csproj │ ├── bundleconfig.json │ ├── Program.cs │ └── Properties │ │ └── launchSettings.json ├── CrystalQuartz.Application.Client │ ├── run-build.bat │ ├── run-watch.bat │ ├── run-dev-server.bat │ ├── bootstrap │ │ ├── bootstrap.js │ │ └── custom_variables.less │ ├── app │ │ ├── global │ │ │ ├── actions │ │ │ │ ├── separator.ts │ │ │ │ ├── separator-view.ts │ │ │ │ ├── actions-utils.ts │ │ │ │ └── action.ts │ │ │ ├── data-state.ts │ │ │ ├── activities │ │ │ │ └── activity-state.ts │ │ │ ├── type-info.less │ │ │ ├── map.ts │ │ │ ├── owner.ts │ │ │ ├── timers │ │ │ │ └── timer.ts │ │ │ ├── effects.less │ │ │ └── constants.less │ │ ├── main-content │ │ │ ├── dates.less │ │ │ ├── index_sm.less │ │ │ ├── nullable-date-view.ts │ │ │ ├── job-group │ │ │ │ ├── job-group.tmpl.html │ │ │ │ └── index.less │ │ │ └── job │ │ │ │ └── index.less │ │ ├── timeline │ │ │ ├── timeline-backlayer.ts │ │ │ └── index_sm.less │ │ ├── dialogs │ │ │ ├── common │ │ │ │ ├── select-option.ts │ │ │ │ ├── validation │ │ │ │ │ ├── validator.ts │ │ │ │ │ ├── validator-options.ts │ │ │ │ │ └── validator-view.ts │ │ │ │ ├── property.ts │ │ │ │ ├── property-view.ts │ │ │ │ ├── select-option-view.ts │ │ │ │ ├── object-browser │ │ │ │ │ └── index.less │ │ │ │ └── errors-view.ts │ │ │ ├── index_sm.less │ │ │ ├── schedule-job │ │ │ │ └── steps │ │ │ │ │ ├── view-commons.ts │ │ │ │ │ └── configuration-step.ts │ │ │ ├── activity-details │ │ │ │ └── object-browser.less │ │ │ └── dialog-view-base.ts │ │ ├── command-progress │ │ │ ├── loading.gif │ │ │ ├── command-progress.tmpl.html │ │ │ ├── index_sm.less │ │ │ └── index.less │ │ ├── commands │ │ │ ├── contracts.ts │ │ │ └── abstract-command.ts │ │ ├── scheduler-explorer.ts │ │ ├── app-bootstrapper │ │ │ └── bootstrapper.ts │ │ ├── main-header │ │ │ ├── index_sm.less │ │ │ └── scheduler-status.less │ │ ├── layers.less │ │ ├── common_sm.less │ │ ├── offline-mode │ │ │ └── offline-mode.tmpl.html │ │ └── command-action.ts │ ├── lib │ │ ├── styles.d.ts │ │ └── templates.d.ts │ ├── index.ts │ ├── .gitignore │ └── tsconfig.json ├── .nuget │ ├── NuGet.exe │ ├── packages.config │ ├── NuGet.Config │ └── NuGetDefaults.Config ├── CrystalQuartz.Application.Client2 │ ├── src │ │ ├── global │ │ │ ├── actions │ │ │ │ ├── separator.ts │ │ │ │ ├── separator-view.tsx │ │ │ │ └── action.ts │ │ │ ├── data-state.ts │ │ │ ├── activities │ │ │ │ └── activity-state.ts │ │ │ ├── layers.scss │ │ │ ├── timers │ │ │ │ └── timer.ts │ │ │ └── effects.scss │ │ ├── commands │ │ │ ├── dto │ │ │ │ └── dto-boolean.ts │ │ │ ├── contracts.ts │ │ │ └── abstract-command.ts │ │ ├── main │ │ │ ├── main-content │ │ │ │ ├── dates.scss │ │ │ │ ├── index_sm.scss │ │ │ │ ├── nullable-date-view.tsx │ │ │ │ ├── job-group │ │ │ │ │ ├── job-group.tmpl.html │ │ │ │ │ └── index.scss │ │ │ │ └── job │ │ │ │ │ ├── index.scss │ │ │ │ │ └── job.tmpl.html │ │ │ ├── index.scss │ │ │ ├── offline-mode │ │ │ │ ├── offline-mode-container.tsx │ │ │ │ └── offline-mode.tmpl.html │ │ │ └── main-header │ │ │ │ └── scheduler-status.scss │ │ ├── utils │ │ │ ├── typing │ │ │ │ └── constructor-of.ts │ │ │ ├── string.ts │ │ │ └── view │ │ │ │ ├── element-extractor.ts │ │ │ │ └── smooth-unrender.ts │ │ ├── api │ │ │ ├── input-type-variant.ts │ │ │ ├── running-job.ts │ │ │ ├── input-type.ts │ │ │ ├── type-info.ts │ │ │ ├── activity-status-code.ts │ │ │ ├── scheduler-event-scope.ts │ │ │ ├── trigger-type.ts │ │ │ ├── activity.ts │ │ │ ├── error-message.ts │ │ │ ├── job-group.ts │ │ │ ├── cron-trigger-type.ts │ │ │ ├── nullable-date.ts │ │ │ ├── scheduler-event-type.ts │ │ │ ├── environment-data.ts │ │ │ ├── job.ts │ │ │ ├── property.ts │ │ │ ├── simple-trigger-type.ts │ │ │ ├── job-details.ts │ │ │ ├── job-properties.ts │ │ │ ├── trigger-details.ts │ │ │ ├── trigger.ts │ │ │ ├── scheduler-data.ts │ │ │ ├── scheduler-details.ts │ │ │ └── scheduler-event.ts │ │ ├── dialogs │ │ │ ├── common │ │ │ │ ├── select-option.ts │ │ │ │ ├── validation │ │ │ │ │ ├── validator.ts │ │ │ │ │ ├── validator-options.ts │ │ │ │ │ └── validator-view.tsx │ │ │ │ ├── property-view.tsx │ │ │ │ ├── select-option-view.tsx │ │ │ │ ├── plainProperty.ts │ │ │ │ ├── errors-view.tsx │ │ │ │ └── object-browser │ │ │ │ │ └── index.scss │ │ │ ├── schedule-job │ │ │ │ └── steps │ │ │ │ │ ├── view-commons.ts │ │ │ │ │ └── configuration-step.ts │ │ │ ├── index_sm.scss │ │ │ ├── job-details │ │ │ │ └── job-details.tmpl.html │ │ │ └── show-schedule-job-dialog.ts │ │ ├── timeline │ │ │ ├── constants.scss │ │ │ └── timeline-tick-view.tsx │ │ ├── CrystalQuartz.Application.Client2 │ │ │ └── package-lock.json │ │ ├── command-progress │ │ │ └── index_sm.scss │ │ ├── scheduler-explorer.ts │ │ ├── common_sm.scss │ │ └── command-action.ts │ ├── dev │ │ └── tsconfig.json │ ├── src_demo │ │ └── tsconfig.json │ ├── tsconfig.dev-server.json │ ├── tsconfig.eslint.json │ ├── tsconfig.json │ └── .prettierrc ├── Demo.Quartz3.Web.Owin │ ├── Global.asax │ ├── ApplicationInsights.config │ ├── Controllers │ │ └── HomeController.cs │ └── Views │ │ └── Home │ │ └── Index.cshtml ├── CrystalQuartz.Web.DemoOwin │ ├── Global.asax │ ├── Global.asax.cs │ ├── HelloJob.cs │ ├── Controllers │ │ └── HomeController.cs │ └── Views │ │ └── Home │ │ └── Index.cshtml ├── CrystalQuartz.Application │ ├── Commands │ │ ├── Inputs │ │ │ ├── NoInput.cs │ │ │ ├── JobInput.cs │ │ │ ├── TriggerInput.cs │ │ │ ├── GroupInput.cs │ │ │ ├── InputTypeInput.cs │ │ │ ├── JobDataItem.cs │ │ │ └── AddTriggerInput.cs │ │ ├── Outputs │ │ │ ├── JobTypesOutput.cs │ │ │ ├── AddTriggerOutput.cs │ │ │ ├── InputTypeVariantsOutput.cs │ │ │ ├── SchedulerDetailsOutput.cs │ │ │ ├── JobDetailsOutput.cs │ │ │ ├── InputTypesOutput.cs │ │ │ ├── EnvironmentDataOutput.cs │ │ │ └── TriggerDetailsOutput.cs │ │ ├── Serialization │ │ │ ├── CommandResultSerializer.cs │ │ │ └── JobTypesOutputSerializer.cs │ │ ├── GetDataCommand.cs │ │ ├── DeleteJobCommand.cs │ │ ├── DeleteGroupCommand.cs │ │ ├── ExecuteNowCommand.cs │ │ ├── PauseTriggerCommand.cs │ │ ├── DeleteTriggerCommand.cs │ │ ├── ResumeTriggerCommand.cs │ │ ├── GetSchedulerDetailsCommand.cs │ │ ├── PauseAllCommand.cs │ │ ├── ResumeAllCommand.cs │ │ ├── StartSchedulerCommand.cs │ │ ├── StopSchedulerCommand.cs │ │ ├── PauseGroupCommand.cs │ │ ├── StandbySchedulerCommand.cs │ │ ├── ResumeGroupCommand.cs │ │ └── ResumeJobCommand.cs │ └── ISchedulerHostProvider.cs ├── CrystalQuartz.Owin452 │ ├── FrameworkVersion.cs │ └── SchedulerEngineProviders.cs ├── CrystalQuartz.Web452 │ ├── FrameworkVersion.cs │ └── SchedulerEngineProviders.cs ├── CrystalQuartz.Core │ ├── Domain │ │ ├── ObjectInput │ │ │ ├── IInputTypeConverter.cs │ │ │ ├── IInputVariantsProvider.cs │ │ │ ├── FixedInputVariantsProvider.cs │ │ │ ├── InputVariant.cs │ │ │ ├── InputType.cs │ │ │ └── StandardInputTypeConverter.cs │ │ ├── SchedulerStatus.cs │ │ ├── Activities │ │ │ ├── ActivityStatus.cs │ │ │ ├── JobGroupData.cs │ │ │ ├── Activity.cs │ │ │ └── JobData.cs │ │ ├── ExecutingJobInfo.cs │ │ ├── Events │ │ │ ├── SchedulerEventScope.cs │ │ │ └── SchedulerEventType.cs │ │ ├── ObjectTraversing │ │ │ ├── SingleValueKind.cs │ │ │ ├── EllipsisPropertyValue.cs │ │ │ ├── PropertyValue.cs │ │ │ ├── ErrorPropertyValue.cs │ │ │ ├── Property.cs │ │ │ ├── SinglePropertyValue.cs │ │ │ ├── EnumerablePropertyValue.cs │ │ │ ├── ObjectPropertyValue.cs │ │ │ └── TraversingOptions.cs │ │ ├── Base │ │ │ ├── NamedObject.cs │ │ │ └── ErrorMessage.cs │ │ ├── TriggerTypes │ │ │ ├── UnknownTriggerType.cs │ │ │ ├── TriggerType.cs │ │ │ └── CronTriggerType.cs │ │ ├── TriggerSecondaryData.cs │ │ ├── TriggerDetailsData.cs │ │ ├── JobDetails.cs │ │ ├── JobDetailsData.cs │ │ └── SchedulerData.cs │ ├── Services │ │ ├── JobResultAnalysing │ │ │ ├── IJobResultAnalyzer.cs │ │ │ └── JobResult.cs │ │ ├── ISchedulerEventTarget.cs │ │ ├── IAllowedJobTypesRegistry.cs │ │ ├── ISchedulerEventHub.cs │ │ ├── ExceptionTraversing │ │ │ ├── IExceptionTransformer.cs │ │ │ └── NoopExceptionTransformer.cs │ │ └── IEventsTransformer.cs │ ├── Contracts │ │ ├── ISchedulerEventSource.cs │ │ ├── ISchedulerEngine.cs │ │ ├── SchedulerEventArgs.cs │ │ └── SchedulerServices.cs │ ├── SchedulerProviders │ │ ├── ISchedulerProvider.cs │ │ ├── RemoteSchedulerProvider.cs │ │ └── FuncSchedulerProvider.cs │ └── Properties │ │ └── AssemblyInfo.cs ├── CrystalQuartz.Core.Quartz3.Tests │ ├── Quartz3SchedulerEngineTests.cs │ ├── TestJob.cs │ └── Stubs │ │ └── TriggerStub.cs ├── CrystalQuartz.WebFramework │ ├── Commands │ │ ├── ICommand.cs │ │ └── CommandResult.cs │ ├── HttpAbstractions │ │ ├── IResponseRenderer.cs │ │ ├── IRequest.cs │ │ └── Response.cs │ ├── Response │ │ ├── IResponseFiller.cs │ │ └── DefaultResponseFiller.cs │ ├── Routing │ │ ├── IRequestMatcher.cs │ │ └── CatchAllRequestMatcher.cs │ ├── Request │ │ ├── IRequestHandler.cs │ │ ├── FileRequestHandler.cs │ │ ├── RequestHandlingResult.cs │ │ └── SingleFileRequestHandler.cs │ ├── Serialization │ │ └── ISerializer.cs │ ├── IRunningApplication.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Utils │ │ ├── IStreamWriterSessionProvider.cs │ │ ├── StandardStreamWriterSessionProvider.cs │ │ └── ExceptionHelper.cs │ ├── Config │ │ ├── IHandlerConfig.cs │ │ └── EmptyHandlerConfig.cs │ └── Binding │ │ └── DictionaryRequest.cs ├── CrystalQuartz.AspNetCore │ ├── AspNetCoreOptions.cs │ ├── FrameworkVersion.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── SchedulerEngineProviders.cs ├── CrystalQuartz.Core.Quartz2.Tests │ ├── TestJob.cs │ └── Stubs │ │ └── TriggerStub.cs ├── CrystalQuartz.Web.Demo │ ├── Default.aspx.cs │ ├── HelloJob.cs │ └── Default.aspx ├── CrystalQuartz.Web │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Configuration │ │ ├── CrystalQuartzConfigurationGroup.cs │ │ ├── CrystalQuartzOptionsSection.cs │ │ └── ProviderSectionHandler.cs │ ├── FrameworkVersion.cs │ ├── SystemWebRequest.cs │ └── SchedulerEngineProviders.cs ├── CrystalQuartz.WebFramework.AspNetCore │ ├── AspNetCoreRequest.cs │ └── CrystalQuartz.WebFramework.AspNetCore.csproj ├── CrystalQuartz.Owin │ ├── FrameworkVersion.cs │ └── SchedulerEngineProviders.cs ├── CrystalQuartz.Application.Tests │ ├── Stubs │ │ └── CommandResultExtensions.cs │ └── Commands │ │ └── Serialization │ │ └── ErrorMessageSerializerTests.cs ├── CrystalQuartz.Core.Tests │ └── Services │ │ └── ExceptionTraversing │ │ └── NoopExceptionTransformerTests.cs ├── CrystalQuartz.Stubs │ ├── AllowedJobTypesRegistryStub.cs │ └── TriggerStub.cs ├── CommonAssemblyInfo.cs ├── Demo.Quartz3.DotNetCore3 │ └── Demo.Quartz3.DotNetCore3.csproj └── CrystalQuartz.Core.Quartz2 │ └── AsyncUtils.cs ├── examples ├── 02_Owin_Web_Simple │ ├── readme.md │ └── CrystalQuartz.Samples.OwinSimple │ │ ├── Global.asax │ │ ├── favicon.ico │ │ ├── Controllers │ │ └── HomeController.cs │ │ ├── Views │ │ └── Home │ │ │ └── Index.cshtml │ │ └── Content │ │ └── Site.css ├── 03_Owin_Web_Remote │ ├── readme.md │ ├── CrystalQuartz.Samples.OwinRemote │ │ ├── Global.asax │ │ ├── favicon.ico │ │ ├── Controllers │ │ │ └── HomeController.cs │ │ ├── Views │ │ │ └── Home │ │ │ │ └── Index.cshtml │ │ ├── Global.asax.cs │ │ ├── Startup.cs │ │ └── Content │ │ │ └── Site.css │ └── CrystalQuartz.Samples.OwinRemote.Server │ │ └── Program.cs ├── 04_SystemWeb_Simple │ └── readme.md ├── 05_SystemWeb_Remote │ ├── readme.md │ ├── CrystalQuartz.Samples.RemoteScheduler.Server │ │ ├── packages.config │ │ ├── Program.cs │ │ └── app.config │ └── CrystalQuartz.Samples.RemoteScheduler │ │ ├── Default.aspx.cs │ │ ├── packages.config │ │ └── Default.aspx ├── 06_CustomStyles │ ├── readme.md │ └── CrystalQuartz.Samples.CustomStyling │ │ ├── Views │ │ ├── Shared │ │ │ ├── _LoginPartial.cshtml │ │ │ ├── Error.cshtml │ │ │ └── Lockout.cshtml │ │ ├── _ViewStart.cshtml │ │ └── Home │ │ │ ├── About.cshtml │ │ │ └── Contact.cshtml │ │ ├── Global.asax │ │ ├── favicon.ico │ │ ├── Scripts │ │ └── _references.js │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ │ ├── App_Start │ │ ├── FilterConfig.cs │ │ └── RouteConfig.cs │ │ ├── Startup.cs │ │ ├── Global.asax.cs │ │ ├── Content │ │ └── Site.css │ │ └── Controllers │ │ └── HomeController.cs ├── .nuget │ ├── NuGet.exe │ └── NuGet.Config ├── 09_Quartz3_AspNetCore_Web │ └── CqSamples.Quartz3.AspNetCore.Simple │ │ ├── Views │ │ └── _ViewImports.cshtml │ │ ├── appsettings.json │ │ ├── wwwroot │ │ └── favicon.ico │ │ ├── appsettings.Development.json │ │ ├── Controllers │ │ └── HomeController.cs │ │ ├── CqSamples.Quartz3.AspNetCore.Simple.csproj │ │ └── Program.cs ├── 08_Quartz3_SystemWeb_Remote │ ├── CqSamples.Quartz3.SystemWeb.RemoteServer │ │ ├── Global.asax │ │ ├── Default.aspx.cs │ │ ├── Global.asax.cs │ │ ├── Default.aspx │ │ └── packages.config │ └── CqSamples.Quartz3.SystemWeb.RemoteScheduler │ │ ├── packages.config │ │ ├── App.config │ │ └── PrintMessageJob.cs ├── 07_Quartz3_SystemWeb_Simple │ └── CrystalQuartz.Samples.Quartz3.SystemWeb.Simple │ │ ├── Global.asax │ │ ├── Default.aspx.cs │ │ ├── Global.asax.cs │ │ ├── Default.aspx │ │ └── packages.config └── CrystalQuarts.Samples.Common │ ├── packages.config │ └── PrintMessageJob.cs ├── docs ├── themes │ └── custom │ │ ├── layout │ │ ├── index.ejs │ │ ├── post.ejs │ │ ├── _partial │ │ │ ├── article-list.ejs │ │ │ ├── post │ │ │ │ ├── tag.ejs │ │ │ │ ├── date.ejs │ │ │ │ ├── category.ejs │ │ │ │ ├── gallery.ejs │ │ │ │ └── title.ejs │ │ │ ├── sidebar.ejs │ │ │ ├── google-analytics.ejs │ │ │ └── article-short.ejs │ │ └── category.ejs │ │ └── source │ │ └── images │ │ └── GitHub-Mark-Light-32px.png ├── .gitignore ├── images_src │ ├── fire_details_dialog.xcf │ ├── detecting_errors_details.xcf │ ├── schedule_new_job_dialog.xcf │ └── detecting_errors_timeline.xcf ├── source │ ├── _posts │ │ └── _remote-scheduler-known-issues.md │ └── images │ │ ├── schedule_new_job_dialog.png │ │ ├── detecting_errors_details.png │ │ ├── detecting_errors_timeline.png │ │ ├── schedule_new_job_dialog_options.png │ │ ├── schedule_new_job_dialog_quartz2.png │ │ ├── schedule_new_job_dialog_no_options.png │ │ └── schedule_new_job_dialog_sendmailjob.png └── package.json ├── _gh-pages-assets ├── readme.md ├── demo.png ├── demo_v4.png ├── demo_v42.png ├── demo_v6.png ├── add_trigger_1.png ├── add_trigger_2.png └── fire_details_dialog.png ├── assets └── logo.png ├── tools └── Rosalia │ ├── Rosalia.dll │ ├── Rosalia.exe │ ├── Nustache.Core.dll │ ├── Rosalia.Core.dll │ ├── Rosalia.FileSystem.dll │ ├── Rosalia.TaskLib.Git.dll │ ├── Rosalia.TaskLib.NuGet.dll │ ├── Rosalia.TaskLib.MsBuild.dll │ ├── Rosalia.TaskLib.Standard.dll │ ├── Rosalia.TaskLib.AssemblyInfo.dll │ └── Rosalia.runtimeconfig.json ├── Build.bat ├── BuildAndDeploy.bat └── .gitattributes /src/version.txt: -------------------------------------------------------------------------------- 1 | 7.3.0.0 -------------------------------------------------------------------------------- /examples/02_Owin_Web_Simple/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/04_SystemWeb_Simple/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/run-build.bat: -------------------------------------------------------------------------------- 1 | webpack -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/run-watch.bat: -------------------------------------------------------------------------------- 1 | npm run watch -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/run-dev-server.bat: -------------------------------------------------------------------------------- 1 | npm run dev-server -------------------------------------------------------------------------------- /docs/themes/custom/layout/index.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/article-list') %> -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /_gh-pages-assets/readme.md: -------------------------------------------------------------------------------- 1 | Static assets to be copied to gh-pages branch while TravisCI build. -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/assets/logo.png -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/bootstrap/bootstrap.js: -------------------------------------------------------------------------------- 1 | import 'bootstrap/js/dropdown'; -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /docs/themes/custom/layout/post.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/article', {post: page, index: false}) %> -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Views/Shared/_LoginPartial.cshtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/.nuget/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/src/.nuget/NuGet.exe -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/actions/separator.ts: -------------------------------------------------------------------------------- 1 | export default class Separator {} -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Hexo database 2 | db.json 3 | 4 | # Hexo generated site 5 | public 6 | 7 | node_modules -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/actions/separator.ts: -------------------------------------------------------------------------------- 1 | export default class Separator {} 2 | -------------------------------------------------------------------------------- /_gh-pages-assets/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/demo.png -------------------------------------------------------------------------------- /examples/.nuget/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/.nuget/NuGet.exe -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/data-state.ts: -------------------------------------------------------------------------------- 1 | export type DataState = 'unknown'|'error'|'ready'; -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-content/dates.less: -------------------------------------------------------------------------------- 1 | .cq-date .cq-none { 2 | color: #CCCCCC; 3 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/commands/dto/dto-boolean.ts: -------------------------------------------------------------------------------- 1 | export type DtoBoolean = 1 | undefined; 2 | -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.dll -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.exe -------------------------------------------------------------------------------- /_gh-pages-assets/demo_v4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/demo_v4.png -------------------------------------------------------------------------------- /_gh-pages-assets/demo_v42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/demo_v42.png -------------------------------------------------------------------------------- /_gh-pages-assets/demo_v6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/demo_v6.png -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/data-state.ts: -------------------------------------------------------------------------------- 1 | export type DataState = 'unknown' | 'error' | 'ready'; 2 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/dates.scss: -------------------------------------------------------------------------------- 1 | .cq-date .cq-none { 2 | color: #CCCCCC; 3 | } -------------------------------------------------------------------------------- /tools/Rosalia/Nustache.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Nustache.Core.dll -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.Core.dll -------------------------------------------------------------------------------- /_gh-pages-assets/add_trigger_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/add_trigger_1.png -------------------------------------------------------------------------------- /_gh-pages-assets/add_trigger_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/add_trigger_2.png -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/dev/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "include": ["*.ts"], 4 | } -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.FileSystem.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.FileSystem.dll -------------------------------------------------------------------------------- /docs/images_src/fire_details_dialog.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/images_src/fire_details_dialog.xcf -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src_demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "include": ["*.ts"], 4 | } -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.TaskLib.Git.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.TaskLib.Git.dll -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.TaskLib.NuGet.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.TaskLib.NuGet.dll -------------------------------------------------------------------------------- /_gh-pages-assets/fire_details_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/_gh-pages-assets/fire_details_dialog.png -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/timeline/timeline-backlayer.ts: -------------------------------------------------------------------------------- 1 | export default class TimelineBacklayer { 2 | constructor() {} 3 | } -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.TaskLib.MsBuild.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.TaskLib.MsBuild.dll -------------------------------------------------------------------------------- /docs/images_src/detecting_errors_details.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/images_src/detecting_errors_details.xcf -------------------------------------------------------------------------------- /docs/images_src/schedule_new_job_dialog.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/images_src/schedule_new_job_dialog.xcf -------------------------------------------------------------------------------- /docs/source/_posts/_remote-scheduler-known-issues.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Remote Scheduler known issues 3 | categories: 4 | - [Getting Started] 5 | --- -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/lib/styles.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.less" { 2 | const content: string; 3 | export default content; 4 | } -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.TaskLib.Standard.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.TaskLib.Standard.dll -------------------------------------------------------------------------------- /docs/images_src/detecting_errors_timeline.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/images_src/detecting_errors_timeline.xcf -------------------------------------------------------------------------------- /docs/source/images/schedule_new_job_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/schedule_new_job_dialog.png -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/utils/typing/constructor-of.ts: -------------------------------------------------------------------------------- 1 | export type ConstructorOf = { 2 | new (...args: never[]): T; 3 | }; 4 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.Web.Owin/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="Demo.Quartz3.Web.Owin.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.TaskLib.AssemblyInfo.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/tools/Rosalia/Rosalia.TaskLib.AssemblyInfo.dll -------------------------------------------------------------------------------- /docs/source/images/detecting_errors_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/detecting_errors_details.png -------------------------------------------------------------------------------- /docs/source/images/detecting_errors_timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/detecting_errors_timeline.png -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/CrystalQuartz.Samples.RemoteScheduler.Server/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/select-option.ts: -------------------------------------------------------------------------------- 1 | export interface SelectOption { 2 | title: string; 3 | value: string; 4 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/input-type-variant.ts: -------------------------------------------------------------------------------- 1 | export interface InputTypeVariant { 2 | value: string; 3 | label: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/select-option.ts: -------------------------------------------------------------------------------- 1 | export interface SelectOption { 2 | title: string; 3 | value: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/src/Demo.Quartz3.DotNetCore/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/validation/validator.ts: -------------------------------------------------------------------------------- 1 | export interface IValidator { 2 | (value: T): string[] | undefined; 3 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/activities/activity-state.ts: -------------------------------------------------------------------------------- 1 | export enum ActivityState { 2 | InProgress, 3 | Success, 4 | Failure 5 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/type-info.less: -------------------------------------------------------------------------------- 1 | .type-info { 2 | color: #666666; 3 | 4 | .name { 5 | color: #333333; 6 | } 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/running-job.ts: -------------------------------------------------------------------------------- 1 | export interface RunningJob { 2 | FireInstanceId: string; 3 | UniqueTriggerKey: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/validation/validator.ts: -------------------------------------------------------------------------------- 1 | export interface IValidator { 2 | (value: T): string[] | undefined; 3 | } 4 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/activities/activity-state.ts: -------------------------------------------------------------------------------- 1 | export enum ActivityState { 2 | InProgress, 3 | Success, 4 | Failure, 5 | } 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.DemoOwin/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="CrystalQuartz.Web.DemoOwin.WebApiApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /docs/source/images/schedule_new_job_dialog_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/schedule_new_job_dialog_options.png -------------------------------------------------------------------------------- /docs/source/images/schedule_new_job_dialog_quartz2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/schedule_new_job_dialog_quartz2.png -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/article-list.ejs: -------------------------------------------------------------------------------- 1 | <% page.posts.each(function(post){ %> 2 | <%- partial('article-short', {post: post, index: true}) %> 3 | <% }) %> -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/input-type.ts: -------------------------------------------------------------------------------- 1 | export interface InputType { 2 | code: string; 3 | label: string; 4 | hasVariants: boolean; 5 | } 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/type-info.ts: -------------------------------------------------------------------------------- 1 | export interface TypeInfo { 2 | Namespace: string; 3 | Name: string; 4 | Assembly: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/timeline/constants.scss: -------------------------------------------------------------------------------- 1 | $timeline-global-pick-height: 6px; 2 | $timeline-global-pick-width: 6px; 3 | $timeline-body-width: 1px; 4 | -------------------------------------------------------------------------------- /docs/source/images/schedule_new_job_dialog_no_options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/schedule_new_job_dialog_no_options.png -------------------------------------------------------------------------------- /docs/source/images/schedule_new_job_dialog_sendmailjob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/source/images/schedule_new_job_dialog_sendmailjob.png -------------------------------------------------------------------------------- /docs/themes/custom/source/images/GitHub-Mark-Light-32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/docs/themes/custom/source/images/GitHub-Mark-Light-32px.png -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/index.scss: -------------------------------------------------------------------------------- 1 | @import "./main-aside/aside"; 2 | @import "./main-header"; 3 | @import "./main-content"; 4 | @import "./offline-mode"; 5 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/activity-status-code.ts: -------------------------------------------------------------------------------- 1 | export enum ActivityStatusCode { 2 | Active = 0, 3 | Paused = 1, 4 | Mixed = 2, 5 | Complete = 3, 6 | } 7 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/scheduler-event-scope.ts: -------------------------------------------------------------------------------- 1 | export enum SchedulerEventScope { 2 | Scheduler = 0, 3 | Group = 1, 4 | Job = 2, 5 | Trigger = 3, 6 | } 7 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/trigger-type.ts: -------------------------------------------------------------------------------- 1 | export interface TriggerType { 2 | Code: string; 3 | supportedMisfireInstructions: { [index: number]: string }; 4 | } 5 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/NoInput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class NoInput : SchedulerCommandInput 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Owin452/FrameworkVersion.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Owin 2 | { 3 | public class FrameworkVersion 4 | { 5 | public const string Value = "v4.5.2"; 6 | } 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web452/FrameworkVersion.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web 2 | { 3 | public class FrameworkVersion 4 | { 5 | public const string Value = "v4.5.2"; 6 | } 7 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using Demo.Quartz3.DotNetCore 2 | @namespace Demo.Quartz3.DotNetCore.Pages 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.Web.Owin/ApplicationInsights.config: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /examples/02_Owin_Web_Simple/CrystalQuartz.Samples.OwinSimple/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="CrystalQuartz.Samples.OwinSimple.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="CrystalQuartz.Samples.OwinRemote.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/command-progress/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/src/CrystalQuartz.Application.Client/app/command-progress/loading.gif -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/map.ts: -------------------------------------------------------------------------------- 1 | export const MAP = function(source: js.IObservable, func: (value: T) => U) { 2 | return js.dependentValue(func, source); 3 | }; -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/post/tag.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.tags && post.tags.length){ %> 2 | <%- list_tags(post.tags, { 3 | show_count: false, 4 | class: 'article-tag' 5 | }) %> 6 | <% } %> -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="CrystalQuartz.Samples.CustomStyling.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /examples/02_Owin_Web_Simple/CrystalQuartz.Samples.OwinSimple/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/02_Owin_Web_Simple/CrystalQuartz.Samples.OwinSimple/favicon.ico -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/favicon.ico -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/favicon.ico -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/actions/separator-view.ts: -------------------------------------------------------------------------------- 1 | export default class SeparatorView implements js.IView { 2 | template = ''; 3 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/activity.ts: -------------------------------------------------------------------------------- 1 | import { ActivityStatus } from './activity-status'; 2 | 3 | export interface Activity { 4 | Name: string; 5 | Status: ActivityStatus; 6 | } 7 | -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteServer/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="CqSamples.Quartz3.SystemWeb.RemoteServer.Global" Language="C#" %> 2 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/commands/contracts.ts: -------------------------------------------------------------------------------- 1 | export interface ICommand { 2 | code: string; 3 | data: any; 4 | message: string; 5 | mapper?: (data: any) => TOutput; 6 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/error-message.ts: -------------------------------------------------------------------------------- 1 | export class ErrorMessage { 2 | public constructor( 3 | public readonly level: number, 4 | public readonly text: string 5 | ) {} 6 | } 7 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/job-group.ts: -------------------------------------------------------------------------------- 1 | import { Activity } from './activity'; 2 | import { Job } from './job'; 3 | 4 | export interface JobGroup extends Activity { 5 | Jobs: Job[]; 6 | } 7 | -------------------------------------------------------------------------------- /tools/Rosalia/Rosalia.runtimeconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "runtimeOptions": { 3 | "tfm": "net7.0", 4 | "framework": { 5 | "name": "Microsoft.NETCore.App", 6 | "version": "7.0.0" 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /examples/.nuget/NuGet.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/cron-trigger-type.ts: -------------------------------------------------------------------------------- 1 | import { TriggerType } from './trigger-type'; 2 | 3 | export interface CronTriggerType extends TriggerType { 4 | CronExpression: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/tsconfig.dev-server.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/nullable-date.ts: -------------------------------------------------------------------------------- 1 | export class NullableDate { 2 | public readonly isEmpty = this.date == null; 3 | 4 | public constructor(public readonly date: number | null) {} 5 | } 6 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Scripts/_references.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Scripts/_references.js -------------------------------------------------------------------------------- /examples/07_Quartz3_SystemWeb_Simple/CrystalQuartz.Samples.Quartz3.SystemWeb.Simple/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="CrystalQuartz.Samples.Quartz3.SystemWeb.Simple.Global" Language="C#" %> 2 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/lib/templates.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.tmpl.html" { 2 | const content: string; 3 | export default content; 4 | } 5 | 6 | declare module "*john-smith" { 7 | export default {}; 8 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/scheduler-event-type.ts: -------------------------------------------------------------------------------- 1 | export enum SchedulerEventType { 2 | Fired = 0, 3 | Complete = 1, 4 | Paused = 2, 5 | Resumed = 3, 6 | Standby = 4, 7 | Shutdown = 5, 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts", "src/**/*.tsx", "src_demo/**/*.ts", "dev/**/*.ts"], 4 | "exclude": ["dist-dev-server"] 5 | } 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/JobInput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class JobInput : GroupInput 4 | { 5 | public string Job { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/validation/validator-options.ts: -------------------------------------------------------------------------------- 1 | export interface ValidatorOptions { 2 | source: js.IObservable; 3 | key?: any; 4 | condition?: js.IObservable; 5 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/CrystalQuartz.Application.Client2/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CrystalQuartz.Application.Client2", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": {} 6 | } 7 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectInput/IInputTypeConverter.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectInput 2 | { 3 | public interface IInputTypeConverter 4 | { 5 | object Convert(string input); 6 | } 7 | } -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/post/date.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteScheduler/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/command-progress/command-progress.tmpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |

5 |
6 |
-------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/TriggerInput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class TriggerInput : GroupInput 4 | { 5 | public string Trigger { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/SchedulerStatus.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | public enum SchedulerStatus 4 | { 5 | Empty, 6 | Ready, 7 | Started, 8 | Shutdown, 9 | } 10 | } -------------------------------------------------------------------------------- /Build.bat: -------------------------------------------------------------------------------- 1 | cd src/.nuget 2 | NuGet.exe install Rosalia -ExcludeVersion -OutputDirectory "../../tools" 3 | cd "../../tools/Rosalia/tools" 4 | Rosalia /wd="../../../src" /task=BuildPackages "CrystalQuartz.Build/CrystalQuartz.Build.csproj" 5 | pause -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/GroupInput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class GroupInput : SchedulerCommandInput 4 | { 5 | public string Group { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/sidebar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/environment-data.ts: -------------------------------------------------------------------------------- 1 | export interface EnvironmentData { 2 | SelfVersion: string; 3 | QuartzVersion: string; 4 | DotNetVersion: string; 5 | CustomCssUrl: string; 6 | TimelineSpan: number; 7 | } 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/command-progress/index_sm.scss: -------------------------------------------------------------------------------- 1 | @use "../global/constants" as c; 2 | 3 | @mixin styles { 4 | .progress-indicator { 5 | p { 6 | display: none; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Views/Home/About.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "About"; 3 | } 4 |

@ViewBag.Title.

5 |

@ViewBag.Message

6 | 7 |

Use this area to provide additional information.

8 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/JobResultAnalysing/IJobResultAnalyzer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services.JobResultAnalysing 2 | { 3 | public interface IJobResultAnalyzer 4 | { 5 | JobResult? Analyze(object? jobResult); 6 | } 7 | } -------------------------------------------------------------------------------- /BuildAndDeploy.bat: -------------------------------------------------------------------------------- 1 | cd src/.nuget 2 | NuGet.exe install Rosalia -ExcludeVersion -OutputDirectory "../../tools" 3 | cd "../../tools/Rosalia/tools" 4 | Rosalia /wd="../../../src" /hold /task="PushPackages" "CrystalQuartz.Build/CrystalQuartz.Build.csproj" 5 | pause -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guryanovev/CrystalQuartz/HEAD/examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/actions/separator-view.tsx: -------------------------------------------------------------------------------- 1 | import { View } from 'john-smith/view'; 2 | 3 | export default class SeparatorView implements View { 4 | public template = () => ; 5 | } 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/InputTypeInput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class InputTypeInput : SchedulerCommandInput 4 | { 5 | public string InputTypeCode { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Activities/ActivityStatus.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Activities 2 | { 3 | public enum ActivityStatus 4 | { 5 | Active, 6 | Paused, 7 | Mixed, 8 | Complete, 9 | } 10 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/About.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model AboutModel 3 | @{ 4 | ViewData["Title"] = "About"; 5 | } 6 |

@ViewData["Title"]

7 |

@Model.Message

8 | 9 |

Use this area to provide additional information.

10 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/scheduler-explorer.ts: -------------------------------------------------------------------------------- 1 | import {JobGroup} from './api'; 2 | 3 | /** 4 | * Provides access to basic scheduler data: groups, jobs, triggers. 5 | */ 6 | export interface SchedulerExplorer { 7 | listGroups(): JobGroup[]; 8 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/utils/string.ts: -------------------------------------------------------------------------------- 1 | export const NULL_IF_EMPTY = (value: string | null | undefined) => { 2 | if (value === null || value === undefined) { 3 | return null; 4 | } 5 | 6 | return value === '' ? null : value; 7 | }; 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Quartz3.Tests/Quartz3SchedulerEngineTests.cs: -------------------------------------------------------------------------------- 1 | using NUnit.Framework; 2 | 3 | namespace CrystalQuartz.Core.Quartz3.Tests 4 | { 5 | [TestFixture] 6 | public class Quartz3SchedulerEngineTests 7 | { 8 | 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Contracts/ISchedulerEventSource.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Contracts 2 | { 3 | using System; 4 | 5 | public interface ISchedulerEventSource 6 | { 7 | event EventHandler EventEmitted; 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Commands/ICommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Commands 2 | { 3 | using System.Threading.Tasks; 4 | 5 | public interface ICommand 6 | { 7 | Task Execute(TInput input); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/job.ts: -------------------------------------------------------------------------------- 1 | import { Activity } from './activity'; 2 | import { Trigger } from './trigger'; 3 | 4 | export interface Job extends Activity { 5 | GroupName: string; 6 | UniqueName: string; 7 | Triggers: Trigger[]; 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/property.ts: -------------------------------------------------------------------------------- 1 | import { PropertyValue } from './property-value'; 2 | 3 | export class Property { 4 | public constructor( 5 | public readonly title: string, 6 | public readonly value: PropertyValue 7 | ) {} 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/scheduler-explorer.ts: -------------------------------------------------------------------------------- 1 | import { JobGroup } from './api'; 2 | 3 | /** 4 | * Provides access to basic scheduler data: groups, jobs, triggers. 5 | */ 6 | export interface SchedulerExplorer { 7 | listGroups(): JobGroup[]; 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.AspNetCore/AspNetCoreOptions.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.AspNetCore 2 | { 3 | using System; 4 | 5 | public class AspNetCoreOptions 6 | { 7 | [Obsolete] 8 | public bool ForceSyncIO { get; set; } = false; 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ExecutingJobInfo.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | public class ExecutingJobInfo 4 | { 5 | public string FireInstanceId { get; set; } 6 | 7 | public string UniqueTriggerKey { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Commands/CommandResult.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Commands 2 | { 3 | public class CommandResult 4 | { 5 | public bool Success { get; set; } 6 | 7 | public string? ErrorMessage { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/simple-trigger-type.ts: -------------------------------------------------------------------------------- 1 | import { TriggerType } from './trigger-type'; 2 | 3 | export interface SimpleTriggerType extends TriggerType { 4 | RepeatCount: number; 5 | RepeatInterval: number; 6 | TimesTriggered: number; 7 | } 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/ISchedulerEventTarget.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services 2 | { 3 | using CrystalQuartz.Core.Domain.Events; 4 | 5 | public interface ISchedulerEventTarget 6 | { 7 | void Push(RawSchedulerEvent @event); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/index.ts: -------------------------------------------------------------------------------- 1 | import './app/index.less'; 2 | import './bootstrap/bootstrap.js'; 3 | 4 | import * as js from 'exports-loader?js!./lib/john-smith'; 5 | 6 | import bootstrapper from './app/app-bootstrapper/bootstrapper'; 7 | 8 | $(bootstrapper); 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/ISchedulerHostProvider.cs: -------------------------------------------------------------------------------- 1 | using CrystalQuartz.Core.Contracts; 2 | 3 | namespace CrystalQuartz.Application 4 | { 5 | public interface ISchedulerHostProvider 6 | { 7 | SchedulerHost SchedulerHost { get; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/HttpAbstractions/IResponseRenderer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.HttpAbstractions 2 | { 3 | using System.Threading.Tasks; 4 | 5 | public interface IResponseRenderer 6 | { 7 | Task Render(Response response); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/index_sm.less: -------------------------------------------------------------------------------- 1 | .dialog-container, 2 | .dialogs-overlay { 3 | position: fixed; 4 | margin-right: 0; 5 | width: auto; 6 | left: @aside-width; 7 | right: 0; 8 | } 9 | 10 | .dialog { 11 | right: 20px; 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/validation/validator-options.ts: -------------------------------------------------------------------------------- 1 | import { Listenable } from 'john-smith/reactive'; 2 | 3 | export interface ValidatorOptions { 4 | source: Listenable; 5 | key?: unknown; 6 | condition?: Listenable; 7 | } 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/utils/view/element-extractor.ts: -------------------------------------------------------------------------------- 1 | import { DomElement } from 'john-smith/view'; 2 | 3 | export const EXTRACT_ELEMENT = (domElement: DomElement): HTMLElement => { 4 | return (domElement as unknown as { element: HTMLElement }).element; 5 | }; 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Quartz2.Tests/TestJob.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Quartz2.Tests 2 | { 3 | using Quartz; 4 | 5 | public class TestJob : IJob 6 | { 7 | public void Execute(IJobExecutionContext context) 8 | { 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Events/SchedulerEventScope.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Events 2 | { 3 | public enum SchedulerEventScope : short 4 | { 5 | Scheduler = 0, 6 | Group = 1, 7 | Job = 2, 8 | Trigger = 3, 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/IAllowedJobTypesRegistry.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services 2 | { 3 | using System; 4 | using System.Threading.Tasks; 5 | 6 | public interface IAllowedJobTypesRegistry 7 | { 8 | Task List(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "asp.net", 3 | "private": true, 4 | "dependencies": { 5 | "bootstrap": "3.3.7", 6 | "jquery": "2.2.0", 7 | "jquery-validation": "1.14.0", 8 | "jquery-validation-unobtrusive": "3.2.6" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteScheduler/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/job-details.ts: -------------------------------------------------------------------------------- 1 | import { JobProperties } from './job-properties'; 2 | import { PropertyValue } from './property-value'; 3 | 4 | export interface JobDetails { 5 | JobDataMap: PropertyValue | null; 6 | JobDetails: JobProperties | null; 7 | } 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.DemoOwin/Global.asax.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web.DemoOwin 2 | { 3 | public class WebApiApplication : System.Web.HttpApplication 4 | { 5 | protected void Application_Start() 6 | { 7 | 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Response/IResponseFiller.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Response 2 | { 3 | using CrystalQuartz.WebFramework.HttpAbstractions; 4 | 5 | public interface IResponseFiller 6 | { 7 | Response FillResponse(IRequest request); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Routing/IRequestMatcher.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Routing 2 | { 3 | using CrystalQuartz.WebFramework.HttpAbstractions; 4 | 5 | public interface IRequestMatcher 6 | { 7 | bool CanProcessRequest(IRequest request); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectInput/IInputVariantsProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectInput 2 | { 3 | using System.Collections.Generic; 4 | 5 | public interface IInputVariantsProvider 6 | { 7 | IEnumerable GetVariants(); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/SingleValueKind.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | public enum SingleValueKind 4 | { 5 | Unknown, 6 | Numeric, 7 | String, 8 | Date, 9 | Type, 10 | } 11 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/SchedulerProviders/ISchedulerProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.SchedulerProviders 2 | { 3 | using CrystalQuartz.Core.Contracts; 4 | 5 | public interface ISchedulerProvider 6 | { 7 | object CreateScheduler(ISchedulerEngine engine); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-content/index_sm.less: -------------------------------------------------------------------------------- 1 | .triggers:last-child .data-row-trigger:last-child .primary-data { 2 | border-bottom: 1px solid #DDDDDD; 3 | } 4 | 5 | .jobs:last-child .triggers:last-child .data-row-trigger:last-child .timeline-data { 6 | border-bottom: none; 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Request/IRequestHandler.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Request 2 | { 3 | using CrystalQuartz.WebFramework.HttpAbstractions; 4 | 5 | public interface IRequestHandler 6 | { 7 | RequestHandlingResult HandleRequest(IRequest request); 8 | } 9 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Base/NamedObject.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Base 2 | { 3 | public class NamedObject 4 | { 5 | public NamedObject(string name) 6 | { 7 | Name = name; 8 | } 9 | 10 | public string Name { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/TriggerTypes/UnknownTriggerType.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.TriggerTypes 2 | { 3 | public class UnknownTriggerType : TriggerType 4 | { 5 | public UnknownTriggerType() 6 | : base("unknown") 7 | { 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/commands/contracts.ts: -------------------------------------------------------------------------------- 1 | export type CommandData = Record; 2 | 3 | export interface ICommand { 4 | code: string; 5 | data: CommandData; 6 | message: string; 7 | mapper?: (data: unknown) => TOutput; 8 | } 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.Demo/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace CrystalQuartz.Web.Demo 4 | { 5 | public partial class _Default : System.Web.UI.Page 6 | { 7 | protected void Page_Load(object sender, EventArgs e) 8 | { 9 | 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model System.Web.Mvc.HandleErrorInfo 2 | 3 | @{ 4 | ViewBag.Title = "Error"; 5 | } 6 | 7 |

Error.

8 |

An error occurred while processing your request.

9 | 10 | -------------------------------------------------------------------------------- /src/.nuget/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Serialization/ISerializer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Serialization 2 | { 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | 6 | public interface ISerializer 7 | { 8 | Task Serialize(T target, TextWriter output); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.Web.Owin/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | 3 | namespace Demo.Quartz3.Web.Owin.Controllers 4 | { 5 | public class HomeController : Controller 6 | { 7 | public ActionResult Index() 8 | { 9 | return View(); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/commands/abstract-command.ts: -------------------------------------------------------------------------------- 1 | import { ICommand } from './contracts'; 2 | 3 | export class AbstractCommand implements ICommand { 4 | code: string; 5 | data: any; 6 | message: string; 7 | 8 | constructor() { 9 | this.data = {}; 10 | } 11 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/EllipsisPropertyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | public class EllipsisPropertyValue : PropertyValue 4 | { 5 | public EllipsisPropertyValue() 6 | : base(null) 7 | { 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/ISchedulerEventHub.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services 2 | { 3 | using System.Collections.Generic; 4 | using CrystalQuartz.Core.Domain.Events; 5 | 6 | public interface ISchedulerEventHub 7 | { 8 | IEnumerable List(int minId); 9 | } 10 | } -------------------------------------------------------------------------------- /src/.nuget/NuGet.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/TriggerSecondaryData.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | public class TriggerSecondaryData 4 | { 5 | public string Description { get; set; } 6 | 7 | public int Priority { get; set; } 8 | 9 | public int MisfireInstruction { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /src/.nuget/NuGetDefaults.Config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/JobDataItem.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class JobDataItem 4 | { 5 | public string Key { get; set; } 6 | 7 | public string Value { get; set; } 8 | 9 | public string InputTypeCode { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/JobTypesOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using System; 4 | using CrystalQuartz.WebFramework.Commands; 5 | 6 | public class JobTypesOutput : CommandResult 7 | { 8 | public Type[] AllowedTypes { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Events/SchedulerEventType.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Events 2 | { 3 | public enum SchedulerEventType : short 4 | { 5 | Fired = 0, 6 | Complete = 1, 7 | Paused = 2, 8 | Resumed = 3, 9 | Standby = 4, 10 | Shutdown = 5, 11 | } 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/TriggerTypes/TriggerType.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.TriggerTypes 2 | { 3 | public abstract class TriggerType 4 | { 5 | protected TriggerType(string code) 6 | { 7 | Code = code; 8 | } 9 | 10 | public string Code { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyTitle("CrystalQuartz.Web")] 5 | [assembly: AssemblyDescription("")] 6 | [assembly: AssemblyConfiguration("")] 7 | [assembly: ComVisible(false)] 8 | [assembly: Guid("1a4c33d6-e64a-4682-85e7-ce16cbb4953d")] -------------------------------------------------------------------------------- /examples/CrystalQuarts.Samples.Common/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyTitle("CrystalQuartz.Core")] 5 | [assembly: AssemblyDescription("")] 6 | [assembly: AssemblyConfiguration("")] 7 | [assembly: ComVisible(false)] 8 | [assembly: Guid("4f59b3e9-e2fb-43e4-ac64-962c94566e77")] -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/post/category.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.categories && post.categories.length){ %> 2 | 10 | <% } %> -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /.idea/shelf/ 3 | /.idea/workspace.xml 4 | 5 | # Project exclude paths 6 | /bin/ 7 | /dist/ 8 | /dist-dev-server/ 9 | /dist_demo/ 10 | 11 | # Editor-based HTTP Client requests 12 | /.idea/httpRequests/ 13 | rest-client.private.env.json 14 | http-client.private.env.json -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/ExceptionTraversing/IExceptionTransformer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services.ExceptionTraversing 2 | { 3 | using System; 4 | using CrystalQuartz.Core.Domain.Base; 5 | 6 | public interface IExceptionTransformer 7 | { 8 | ErrorMessage[]? Transform(Exception exception); 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/Configuration/CrystalQuartzConfigurationGroup.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web.Configuration 2 | { 3 | using System.Configuration; 4 | 5 | public class CrystalQuartzConfigurationGroup : ConfigurationSectionGroup 6 | { 7 | public CrystalQuartzConfigurationGroup() 8 | { 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/IRunningApplication.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.WebFramework.HttpAbstractions; 5 | 6 | public interface IRunningApplication 7 | { 8 | public Task Handle(IRequest request, IResponseRenderer renderer); 9 | } 10 | } -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/CrystalQuartz.Samples.RemoteScheduler/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.RemoteScheduler 2 | { 3 | using System; 4 | 5 | public partial class _Default : System.Web.UI.Page 6 | { 7 | protected void Page_Load(object sender, EventArgs e) 8 | { 9 | 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Quartz3.Tests/TestJob.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Quartz3.Tests 2 | { 3 | using System.Threading.Tasks; 4 | using Quartz; 5 | 6 | public class TestJob : IJob 7 | { 8 | public Task Execute(IJobExecutionContext context) 9 | { 10 | return Task.Delay(0); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.DemoOwin/HelloJob.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web.DemoOwin 2 | { 3 | using System; 4 | using Quartz; 5 | 6 | public class HelloJob : IJob 7 | { 8 | public void Execute(IJobExecutionContext context) 9 | { 10 | Console.WriteLine("Hello, CrystalQuartz!"); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /examples/02_Owin_Web_Simple/CrystalQuartz.Samples.OwinSimple/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | 3 | namespace CrystalQuartz.Samples.OwinSimple.Controllers 4 | { 5 | public class HomeController : Controller 6 | { 7 | public ActionResult Index() 8 | { 9 | return View(); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote.Server/Program.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.OwinRemote.Server 2 | { 3 | using CrystalQuarts.Samples.Common; 4 | 5 | class Program 6 | { 7 | static void Main() 8 | { 9 | RemoteSchedulerRunner.RunSampleScheduler(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/job-properties.ts: -------------------------------------------------------------------------------- 1 | import { TypeInfo } from './type-info'; 2 | 3 | export interface JobProperties { 4 | Description: string; 5 | ConcurrentExecutionDisallowed: boolean; 6 | PersistJobDataAfterExecution: boolean; 7 | RequestsRecovery: boolean; 8 | Durable: boolean; 9 | JobType: TypeInfo; 10 | } 11 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyTitle("CrystalQuartz.WebFramework")] 5 | [assembly: AssemblyDescription("")] 6 | [assembly: AssemblyConfiguration("")] 7 | [assembly: ComVisible(false)] 8 | [assembly: Guid("38f22c3a-8ef4-48d8-8ea8-01d694bb86d6")] -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Views/Shared/Lockout.cshtml: -------------------------------------------------------------------------------- 1 | @model System.Web.Mvc.HandleErrorInfo 2 | 3 | @{ 4 | ViewBag.Title = "Locked Out"; 5 | } 6 | 7 |
8 |

Locked out.

9 |

This account has been locked out, please try again later.

10 |
11 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework.AspNetCore/AspNetCoreRequest.cs: -------------------------------------------------------------------------------- 1 | using CrystalQuartz.WebFramework.HttpAbstractions; 2 | 3 | namespace CrystalQuartz.WebFramework.AspNetCore 4 | { 5 | public class AspNetCoreRequest : IRequest 6 | { 7 | public string this[string key] 8 | { 9 | get { return "todo"; } 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/CrystalQuartz.Samples.RemoteScheduler.Server/Program.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.RemoteScheduler.Server 2 | { 3 | using CrystalQuarts.Samples.Common; 4 | 5 | class Program 6 | { 7 | static void Main() 8 | { 9 | RemoteSchedulerRunner.RunSampleScheduler(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/schedule-job/steps/view-commons.ts: -------------------------------------------------------------------------------- 1 | import __each from 'lodash/each'; 2 | 3 | export const CHANGE_DOM_DISPLAY = (blocks: { code: string, dom: js.IListenerDom }[], currentCode: string) => { 4 | __each(blocks, block => { 5 | block.dom.$.css('display', currentCode === block.code ? 'block' : 'none'); 6 | }); 7 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/bootstrap/custom_variables.less: -------------------------------------------------------------------------------- 1 | @border-radius-base: 0; 2 | @input-border-radius: 0; 3 | @input-border-radius-small: 0; 4 | @input-border-radius-large: 0; 5 | 6 | @link-hover-color: inherit; 7 | @link-hover-decoration: none; 8 | 9 | //@link-color: #333333; 10 | //@link-hover-color: #111111; 11 | //@link-hover-decoration: none; -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Contracts/ISchedulerEngine.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Contracts 2 | { 3 | using System.Threading.Tasks; 4 | 5 | public interface ISchedulerEngine 6 | { 7 | Task CreateStandardRemoteScheduler(string url); 8 | 9 | Task CreateServices(object scheduler, Options options); 10 | } 11 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Utils/IStreamWriterSessionProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Utils 2 | { 3 | using System; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | public interface IStreamWriterSessionProvider 8 | { 9 | Task UseWriter(Stream output, Func payload); 10 | } 11 | } -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | 3 | namespace CrystalQuartz.Samples.OwinRemote.Controllers 4 | { 5 | public class HomeController : Controller 6 | { 7 | public ActionResult Index() 8 | { 9 | return View(); 10 | } 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/CrystalQuartz.Samples.RemoteScheduler.Server/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/PropertyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | using System; 4 | 5 | public abstract class PropertyValue 6 | { 7 | protected PropertyValue(Type? type) 8 | { 9 | Type = type; 10 | } 11 | 12 | public Type? Type { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/HttpAbstractions/IRequest.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.HttpAbstractions 2 | { 3 | using System.Collections.Generic; 4 | 5 | public interface IRequest 6 | { 7 | IEnumerable AllKeys { get; } 8 | 9 | string? this[string key] 10 | { 11 | get; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/AddTriggerOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using System.Collections.Generic; 4 | using CrystalQuartz.WebFramework.Commands; 5 | 6 | public class AddTriggerOutput : CommandResult 7 | { 8 | public IDictionary? ValidationErrors { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/InputTypeVariantsOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using CrystalQuartz.Core.Domain.ObjectInput; 4 | using CrystalQuartz.WebFramework.Commands; 5 | 6 | public class InputTypeVariantsOutput : CommandResult 7 | { 8 | public InputVariant[] Items { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/SchedulerDetailsOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using CrystalQuartz.Core.Domain; 4 | using CrystalQuartz.WebFramework.Commands; 5 | 6 | public class SchedulerDetailsOutput : CommandResult 7 | { 8 | public SchedulerDetails SchedulerDetails { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | 3 | namespace CqSamples.Quartz3.AspNetCore.Simple.Controllers 4 | { 5 | public class HomeController : Controller 6 | { 7 | public IActionResult Index() 8 | { 9 | return View(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/app-bootstrapper/bootstrapper.ts: -------------------------------------------------------------------------------- 1 | import BootstrapperViewModel from './bootstrapper-view-model'; 2 | import BootstrapperView from './bootstrapper-view'; 3 | 4 | export default () => { 5 | const bootstrapperViewModel = new BootstrapperViewModel(); 6 | new BootstrapperView().init(bootstrapperViewModel); 7 | bootstrapperViewModel.start(); 8 | }; -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/property.ts: -------------------------------------------------------------------------------- 1 | export enum PropertyType { 2 | String, 3 | Boolean, 4 | Type, 5 | Numeric, 6 | Array, 7 | Object, 8 | Date 9 | } 10 | 11 | export class Property { 12 | constructor( 13 | public title: string, 14 | public value: any, 15 | public valueType: PropertyType) { } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Routing/CatchAllRequestMatcher.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Routing 2 | { 3 | using CrystalQuartz.WebFramework.HttpAbstractions; 4 | 5 | public class CatchAllRequestMatcher : IRequestMatcher 6 | { 7 | public bool CanProcessRequest(IRequest request) 8 | { 9 | return true; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/property-view.tsx: -------------------------------------------------------------------------------- 1 | import { PlainProperty } from './plainProperty'; 2 | import formatter from './value-formatting'; 3 | 4 | export const PropertyView = (property: PlainProperty) => ( 5 | 6 | {property.title} 7 | 8 | 9 | ); 10 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/schedule-job/steps/view-commons.ts: -------------------------------------------------------------------------------- 1 | // import __each from 'lodash/each'; 2 | // 3 | // export const CHANGE_DOM_DISPLAY = (blocks: { code: string, dom: js.IListenerDom }[], currentCode: string) => { 4 | // __each(blocks, block => { 5 | // block.dom.$.css('display', currentCode === block.code ? 'block' : 'none'); 6 | // }); 7 | // } 8 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/index_sm.scss: -------------------------------------------------------------------------------- 1 | @use '../global/constants'; 2 | 3 | @mixin styles { 4 | .dialog-container, 5 | .dialogs-overlay { 6 | position: fixed; 7 | margin-right: 0; 8 | width: auto; 9 | left: constants.$aside-width; 10 | right: 0; 11 | } 12 | 13 | .dialog { 14 | right: 20px; 15 | } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/trigger-details.ts: -------------------------------------------------------------------------------- 1 | import { PropertyValue } from './property-value'; 2 | import { Trigger } from './trigger'; 3 | 4 | export interface TriggerDetails { 5 | trigger: Trigger; 6 | jobDataMap: PropertyValue | null; 7 | secondaryData: { 8 | priority: number; 9 | misfireInstruction: number; 10 | description: string; 11 | } | null; 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/validation/validator-view.tsx: -------------------------------------------------------------------------------- 1 | import { Listenable } from 'john-smith/reactive'; 2 | import { List } from 'john-smith/view/components'; 3 | 4 | export const ValidatorView = (viewModel: { errors: Listenable }) => ( 5 |
    6 |
  • {error}
  • } model={viewModel.errors}>
    7 |
8 | ); 9 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Base/ErrorMessage.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Base 2 | { 3 | public class ErrorMessage 4 | { 5 | public ErrorMessage(string message, int level) 6 | { 7 | Message = message; 8 | Level = level; 9 | } 10 | 11 | public string Message { get; } 12 | 13 | public int Level { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/ErrorPropertyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | public class ErrorPropertyValue : PropertyValue 4 | { 5 | public ErrorPropertyValue(string message) 6 | : base(null) 7 | { 8 | Message = message; 9 | } 10 | 11 | public string Message { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/App_Start/FilterConfig.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.CustomStyling 2 | { 3 | using System.Web.Mvc; 4 | 5 | public class FilterConfig 6 | { 7 | public static void RegisterGlobalFilters(GlobalFilterCollection filters) 8 | { 9 | filters.Add(new HandleErrorAttribute()); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Startup.cs: -------------------------------------------------------------------------------- 1 | using CrystalQuartz.Samples.CustomStyling; 2 | using Microsoft.Owin; 3 | 4 | [assembly: OwinStartup(typeof(Startup))] 5 | namespace CrystalQuartz.Samples.CustomStyling 6 | { 7 | using Owin; 8 | 9 | public partial class Startup 10 | { 11 | public void Configuration(IAppBuilder app) 12 | { 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/select-option-view.tsx: -------------------------------------------------------------------------------- 1 | import { SelectOption } from './select-option'; 2 | 3 | export const SelectOptionView = (viewModel: SelectOption | string) => { 4 | const actualOption: SelectOption = 5 | typeof viewModel === 'string' ? { title: viewModel, value: viewModel } : viewModel; 6 | 7 | return ; 8 | }; 9 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.Web.Owin/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

Redirecting to the panel...

7 | 8 | force redirect 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/trigger.ts: -------------------------------------------------------------------------------- 1 | import { Activity } from './activity'; 2 | import { TriggerType } from './trigger-type'; 3 | 4 | export interface Trigger extends Activity { 5 | GroupName: string; 6 | EndDate: number | null; 7 | NextFireDate: number | null; 8 | PreviousFireDate: number | null; 9 | StartDate: number; 10 | TriggerType: TriggerType; 11 | UniqueTriggerKey: string; 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/Property.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | public class Property 4 | { 5 | public Property(string title, PropertyValue? value) 6 | { 7 | Title = title; 8 | Value = value; 9 | } 10 | 11 | public string Title { get; } 12 | 13 | public PropertyValue? Value { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.Demo/HelloJob.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web.Demo 2 | { 3 | using System; 4 | using System.Threading; 5 | using Quartz; 6 | 7 | public class HelloJob : IJob 8 | { 9 | public void Execute(IJobExecutionContext context) 10 | { 11 | Thread.Sleep(TimeSpan.FromSeconds(20)); 12 | Console.WriteLine("Hello, CrystalQuartz!"); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.DemoOwin/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | 3 | namespace CrystalQuartz.Web.DemoOwin.Controllers 4 | { 5 | public class HomeController : Controller 6 | { 7 | public ActionResult Index() 8 | { 9 | return View(); 10 | } 11 | public ActionResult Frame() 12 | { 13 | return View(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Quartz2.Tests/Stubs/TriggerStub.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Quartz2.Tests.Stubs 2 | { 3 | using Quartz.Impl.Triggers; 4 | 5 | public class TriggerStub : SimpleTriggerImpl 6 | { 7 | public TriggerStub(string name) : base(name) 8 | { 9 | } 10 | 11 | public TriggerStub(string name, string @group) : base(name, @group) 12 | { 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Quartz3.Tests/Stubs/TriggerStub.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Quartz3.Tests.Stubs 2 | { 3 | using Quartz.Impl.Triggers; 4 | 5 | public class TriggerStub : SimpleTriggerImpl 6 | { 7 | public TriggerStub(string name) : base(name) 8 | { 9 | } 10 | 11 | public TriggerStub(string name, string @group) : base(name, @group) 12 | { 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/ExceptionTraversing/NoopExceptionTransformer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services.ExceptionTraversing 2 | { 3 | using System; 4 | using CrystalQuartz.Core.Domain.Base; 5 | 6 | public class NoopExceptionTransformer : IExceptionTransformer 7 | { 8 | public ErrorMessage[]? Transform(Exception exception) 9 | { 10 | return null; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "CommonJS", 5 | "declaration": false, 6 | "sourceMap": true, 7 | "outDir": "./dist", 8 | "strict": true, 9 | "lib": ["dom", "es6"], 10 | "jsx": "react", 11 | "jsxFactory": "JS.d" 12 | }, 13 | "include": ["src/**/*.ts"], 14 | "exclude": ["node_modules", "src/**/*.spec.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Contracts/SchedulerEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Contracts 2 | { 3 | using System; 4 | using CrystalQuartz.Core.Domain.Events; 5 | 6 | public class SchedulerEventArgs : EventArgs 7 | { 8 | public SchedulerEventArgs(RawSchedulerEvent payload) 9 | { 10 | Payload = payload; 11 | } 12 | 13 | public RawSchedulerEvent Payload { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/Index.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace Demo.Quartz3.DotNetCore.Pages 9 | { 10 | public class IndexModel : PageModel 11 | { 12 | public void OnGet() 13 | { 14 | 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/owner.ts: -------------------------------------------------------------------------------- 1 | import __each from 'lodash/each'; 2 | 3 | export class Owner implements js.IDisposable { 4 | private _properties: js.IDisposable[] = []; 5 | 6 | own(property: T): T { 7 | this._properties.push(property); 8 | 9 | return property; 10 | } 11 | 12 | dispose(){ 13 | __each(this._properties, p => p.dispose()); 14 | } 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/command-progress/index_sm.less: -------------------------------------------------------------------------------- 1 | .progress-indicator { 2 | position: absolute; 3 | left: 50%; 4 | top: 0; 5 | bottom: 0; 6 | width: @loading-image-width; 7 | 8 | img { 9 | margin: 0; 10 | } 11 | 12 | div { 13 | width: @loading-image-width; 14 | margin-left: -@loading-image-width/2; 15 | } 16 | 17 | p { 18 | display: none; 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Activities/JobGroupData.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Activities 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class JobGroupData : ActivityNode 6 | { 7 | public JobGroupData(string name, IList jobs) 8 | : base(name, jobs) 9 | { 10 | Jobs = jobs; 11 | } 12 | 13 | public IList Jobs { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /examples/02_Owin_Web_Simple/CrystalQuartz.Samples.OwinSimple/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | @ViewBag.Title - My ASP.NET Application 7 | 8 | 9 |

Foo Site

10 | View CrystalQuartz Panel → 11 | 12 | 13 | -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | @ViewBag.Title - My ASP.NET Application 7 | 8 | 9 |

Foo Site

10 | View CrystalQuartz Panel → 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/job-details/job-details.tmpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | × 5 | 6 |

Job details

7 |
8 | 9 | 10 | 11 | 14 |
15 |
16 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.DemoOwin/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

Redirecting to the panel...

7 | 8 | force redirect 9 | @* *@ 14 | 15 | -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/post/gallery.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.photos && post.photos.length){ %> 2 |
3 |
4 | <% post.photos.forEach(function(photo, i){ %> 5 | 6 | 7 | 8 | <% }) %> 9 |
10 |
11 | <% } %> -------------------------------------------------------------------------------- /docs/themes/custom/layout/category.ejs: -------------------------------------------------------------------------------- 1 |
2 | 8 | 9 |

<%= config.category_long_titles[page.category] ? config.category_long_titles[page.category] : page.category %>

10 |
11 | 12 | 13 | 14 | <%- partial('_partial/article-list') %> -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | using System.Web.Routing; 3 | 4 | namespace CrystalQuartz.Samples.OwinRemote 5 | { 6 | public class MvcApplication : System.Web.HttpApplication 7 | { 8 | protected void Application_Start() 9 | { 10 | AreaRegistration.RegisterAllAreas(); 11 | RouteConfig.RegisterRoutes(RouteTable.Routes); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/JobDetailsOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using CrystalQuartz.Core.Domain; 4 | using CrystalQuartz.Core.Domain.ObjectTraversing; 5 | using CrystalQuartz.WebFramework.Commands; 6 | 7 | public class JobDetailsOutput : CommandResult 8 | { 9 | public PropertyValue? JobDataMap { get; set; } 10 | 11 | public JobDetails? JobDetails { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/TriggerDetailsData.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | using System.Collections.Generic; 4 | using CrystalQuartz.Core.Domain.Activities; 5 | 6 | public class TriggerDetailsData 7 | { 8 | public TriggerData PrimaryTriggerData { get; set; } 9 | 10 | public TriggerSecondaryData SecondaryTriggerData { get; set; } 11 | 12 | public IDictionary JobDataMap { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Config/IHandlerConfig.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Config 2 | { 3 | using System.Collections.Generic; 4 | using CrystalQuartz.WebFramework.Request; 5 | 6 | public interface IHandlerConfig 7 | { 8 | IEnumerable Handlers { get; } 9 | 10 | FillerConfig WhenCommand(string command); 11 | 12 | FillerConfig WhenPath(string path); 13 | 14 | FillerConfig Else(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-header/index_sm.less: -------------------------------------------------------------------------------- 1 | .main-header { 2 | height: @main-header-primary-height + 2 * @main-header-secondary-height; 3 | } 4 | 5 | .scheduler-caption, 6 | .scheduler-toolbar { 7 | width: 50%; 8 | } 9 | 10 | .scheduler-caption { 11 | padding-right: @loading-image-width/2; 12 | } 13 | 14 | .scheduler-toolbar { 15 | padding-left: @loading-image-width/2; 16 | } 17 | 18 | .scheduler-header .toolbar { 19 | margin-right: 5px; 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/plainProperty.ts: -------------------------------------------------------------------------------- 1 | import { TypeInfo } from '../../api'; 2 | 3 | export enum PropertyType { 4 | String, 5 | Boolean, 6 | Type, 7 | Numeric, 8 | Array, 9 | Object, 10 | Date, 11 | } 12 | 13 | export class PlainProperty { 14 | public constructor( 15 | public title: string, 16 | public value: string | null | undefined | TypeInfo | number | boolean, 17 | public valueType: PropertyType 18 | ) {} 19 | } 20 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/SchedulerProviders/RemoteSchedulerProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.SchedulerProviders 2 | { 3 | using CrystalQuartz.Core.Contracts; 4 | 5 | public class RemoteSchedulerProvider : ISchedulerProvider 6 | { 7 | public string SchedulerHost { get; set; } 8 | 9 | public object CreateScheduler(ISchedulerEngine engine) 10 | { 11 | return engine.CreateStandardRemoteScheduler(SchedulerHost); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.AspNetCore/FrameworkVersion.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.AspNetCore 2 | { 3 | /// 4 | /// Exposes platform info the app was build for. 5 | /// The values should match the TargetFrameworks from csproj file. 6 | /// 7 | public class FrameworkVersion 8 | { 9 | #if NETSTANDARD2_0 10 | public const string Value = ".NET Standard 2.0"; 11 | #else 12 | public const string Value = ".NET Standard 2.1"; 13 | #endif 14 | } 15 | } -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteServer/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.UI; 6 | using System.Web.UI.WebControls; 7 | 8 | namespace CqSamples.Quartz3.SystemWeb.RemoteServer 9 | { 10 | public partial class Default : System.Web.UI.Page 11 | { 12 | protected void Page_Load(object sender, EventArgs e) 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/Contact.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc.RazorPages; 6 | 7 | namespace Demo.Quartz3.DotNetCore.Pages 8 | { 9 | public class ContactModel : PageModel 10 | { 11 | public string Message { get; set; } 12 | 13 | public void OnGet() 14 | { 15 | Message = "Your contact page."; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteServer/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Security; 6 | using System.Web.SessionState; 7 | 8 | namespace CqSamples.Quartz3.SystemWeb.RemoteServer 9 | { 10 | public class Global : System.Web.HttpApplication 11 | { 12 | protected void Application_Start(object sender, EventArgs e) 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/timers/timer.ts: -------------------------------------------------------------------------------- 1 | export class Timer implements js.IDisposable { 2 | private _ref: number; 3 | 4 | schedule(action: () => void, delay: number) { 5 | this.reset(); 6 | this._ref = setTimeout(action, delay); 7 | } 8 | 9 | reset() { 10 | if (this._ref) { 11 | clearTimeout(this._ref); 12 | this._ref = null; 13 | } 14 | } 15 | 16 | dispose() { 17 | this.reset(); 18 | } 19 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/Configuration/CrystalQuartzOptionsSection.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web.Configuration 2 | { 3 | using System.Configuration; 4 | 5 | public class CrystalQuartzOptionsSection : ConfigurationSection 6 | { 7 | [ConfigurationProperty("customCssUrl", IsRequired = true)] 8 | public string CustomCssUrl 9 | { 10 | get { return (string)this["customCssUrl"]; } 11 | set { this["customCssUrl"] = value; } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/Configuration/ProviderSectionHandler.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web.Configuration 2 | { 3 | using System.Configuration; 4 | 5 | public class ProviderSectionHandler : DictionarySectionHandler 6 | { 7 | protected override string KeyAttributeName 8 | { 9 | get { return "property"; } 10 | } 11 | 12 | protected override string ValueAttributeName 13 | { 14 | get { return "value"; } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /examples/07_Quartz3_SystemWeb_Simple/CrystalQuartz.Samples.Quartz3.SystemWeb.Simple/Default.aspx.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.UI; 6 | using System.Web.UI.WebControls; 7 | 8 | namespace CrystalQuartz.Samples.Quartz3.SystemWeb.Simple 9 | { 10 | public partial class Default : System.Web.UI.Page 11 | { 12 | protected void Page_Load(object sender, EventArgs e) 13 | { 14 | 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/actions/actions-utils.ts: -------------------------------------------------------------------------------- 1 | import Separator from './separator'; 2 | import Action from './action'; 3 | 4 | import SeparatorView from './separator-view'; 5 | import ActionView from './action-view'; 6 | 7 | export default class ActionsUtils { 8 | static render(dom: js.IListenerDom, actions: (Separator|Action)[]) { 9 | dom.observes( 10 | actions, 11 | item => item instanceof Separator ? SeparatorView : ActionView); 12 | } 13 | } -------------------------------------------------------------------------------- /examples/07_Quartz3_SystemWeb_Simple/CrystalQuartz.Samples.Quartz3.SystemWeb.Simple/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Security; 6 | using System.Web.SessionState; 7 | 8 | namespace CrystalQuartz.Samples.Quartz3.SystemWeb.Simple 9 | { 10 | public class Global : System.Web.HttpApplication 11 | { 12 | protected void Application_Start(object sender, EventArgs e) 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/About.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc.RazorPages; 6 | 7 | namespace Demo.Quartz3.DotNetCore.Pages 8 | { 9 | public class AboutModel : PageModel 10 | { 11 | public string Message { get; set; } 12 | 13 | public void OnGet() 14 | { 15 | Message = "Your application description page."; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Serialization/CommandResultSerializer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Serialization 2 | { 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | using CrystalQuartz.WebFramework.Commands; 6 | 7 | public class CommandResultSerializer : CommandResultSerializerBase 8 | { 9 | protected override Task SerializeSuccessData(CommandResult target, TextWriter output) => 10 | AsyncUtils.CompletedTask(); 11 | } 12 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/layers.less: -------------------------------------------------------------------------------- 1 | /* 2 | * Layers (z-indexes) 3 | */ 4 | 5 | .main-aside { 6 | z-index: 1000; 7 | } 8 | 9 | .main-footer, 10 | .main-header { 11 | z-index: 2000; 12 | } 13 | 14 | .dialogs-overlay { 15 | z-index: 9000; 16 | } 17 | 18 | .dialog-container { 19 | z-index: 9500; 20 | } 21 | 22 | .main-container .dropdown-menu { 23 | z-index: 9800; 24 | } 25 | 26 | .offline-mode { 27 | z-index: 9990; 28 | } 29 | 30 | .notifications { 31 | z-index: 10000; 32 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/common_sm.less: -------------------------------------------------------------------------------- 1 | .scrollable-area { 2 | margin-top: @main-header-primary-height + 2 * @main-header-secondary-height; 3 | } 4 | 5 | .data-header .primary-data, 6 | .data-header .ticks-container, 7 | .data-row .primary-data { 8 | width: 100%; 9 | float: none; 10 | position: relative; 11 | } 12 | 13 | .data-row.data-row-trigger { 14 | height: @data-row-height + @timeline-row-height-sm; 15 | } 16 | 17 | .data-row .dropdown-menu { 18 | right: 0; 19 | left: auto; 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/layers.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * Layers (z-indexes) 3 | */ 4 | 5 | .main-aside { 6 | z-index: 1000; 7 | } 8 | 9 | .main-footer, 10 | .main-header { 11 | z-index: 2000; 12 | } 13 | 14 | .dialogs-overlay { 15 | z-index: 9000; 16 | } 17 | 18 | .dialog-container { 19 | z-index: 9500; 20 | } 21 | 22 | .main-container .dropdown-menu { 23 | z-index: 9800; 24 | } 25 | 26 | .offline-mode { 27 | z-index: 9990; 28 | } 29 | 30 | .notifications { 31 | z-index: 10000; 32 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/InputTypesOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using CrystalQuartz.WebFramework.Commands; 4 | 5 | public class InputTypeItem 6 | { 7 | public string Code { get; set; } 8 | 9 | public string Label { get; set; } 10 | 11 | public bool HasVariants { get; set; } 12 | } 13 | 14 | public class InputTypesOutput : CommandResult 15 | { 16 | public InputTypeItem[] Items { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/JobDetails.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | using System; 4 | 5 | public class JobDetails 6 | { 7 | public string? Description { get; set; } 8 | 9 | public bool ConcurrentExecutionDisallowed { get; set; } 10 | 11 | public bool PersistJobDataAfterExecution { get; set; } 12 | 13 | public bool RequestsRecovery { get; set; } 14 | 15 | public bool Durable { get; set; } 16 | 17 | public Type JobType { get; set; } 18 | } 19 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/JobDetailsData.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class JobDetailsData 6 | { 7 | public JobDetailsData(JobDetails? jobDetails, IDictionary? jobDataMap) 8 | { 9 | JobDetails = jobDetails; 10 | JobDataMap = jobDataMap; 11 | } 12 | 13 | public JobDetails? JobDetails { get; } 14 | 15 | public IDictionary? JobDataMap { get; } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.AspNetCore/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | [assembly: AssemblyTitle("CrystalQuartz.AspNetCore")] 5 | [assembly: AssemblyDescription("")] 6 | [assembly: AssemblyConfiguration("")] 7 | [assembly: AssemblyCompany("")] 8 | [assembly: AssemblyCopyright("Copyright © 2018")] 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: AssemblyCulture("")] 11 | 12 | [assembly: ComVisible(false)] 13 | 14 | [assembly: Guid("CC940EDE-8151-43AF-B661-A98DE33297F7")] 15 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Activities/Activity.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Activities 2 | { 3 | using CrystalQuartz.Core.Domain.Base; 4 | 5 | public class Activity : NamedObject 6 | { 7 | public Activity(string name, ActivityStatus status) 8 | : base(name) 9 | { 10 | Status = status; 11 | } 12 | 13 | public Activity(string name) 14 | : base(name) 15 | { 16 | } 17 | 18 | public ActivityStatus Status { get; } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/TriggerTypes/CronTriggerType.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.TriggerTypes 2 | { 3 | public class CronTriggerType : TriggerType 4 | { 5 | private readonly string _cronExpression; 6 | 7 | public CronTriggerType(string cronExpression) 8 | : base("cron") 9 | { 10 | _cronExpression = cronExpression; 11 | } 12 | 13 | public string CronExpression 14 | { 15 | get { return _cronExpression; } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/scheduler-data.ts: -------------------------------------------------------------------------------- 1 | import { JobGroup } from './job-group'; 2 | import { RunningJob } from './running-job'; 3 | import { SchedulerEvent } from './scheduler-event'; 4 | 5 | export interface SchedulerData { 6 | Name: string; 7 | Status: string; 8 | InstanceId: string; 9 | RunningSince: number | null; 10 | JobsTotal: number; 11 | JobsExecuted: number; 12 | ServerInstanceMarker: number; 13 | JobGroups: JobGroup[]; 14 | InProgress: RunningJob[]; 15 | Events: SchedulerEvent[]; 16 | } 17 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/commands/abstract-command.ts: -------------------------------------------------------------------------------- 1 | import { CommandData, ICommand } from './contracts'; 2 | 3 | export abstract class AbstractTypedCommand implements ICommand { 4 | public abstract readonly code: string; 5 | public abstract readonly message: string; 6 | 7 | protected constructor(public readonly data: CommandData) {} 8 | 9 | public abstract typedMapper(dto: TDto): TResult; 10 | 11 | public readonly mapper = (unknownDto: unknown) => this.typedMapper(unknownDto as TDto); 12 | } 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/JobResultAnalysing/JobResult.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services.JobResultAnalysing 2 | { 3 | using System; 4 | 5 | public class JobResult 6 | { 7 | public static readonly JobResult Success = new JobResult(false, null); 8 | 9 | public JobResult(bool faulted, Exception? error) 10 | { 11 | Faulted = faulted; 12 | Error = error; 13 | } 14 | 15 | public bool Faulted { get; } 16 | 17 | public Exception? Error { get; } 18 | } 19 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Config/EmptyHandlerConfig.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Config 2 | { 3 | using System.Collections.Generic; 4 | using CrystalQuartz.WebFramework.Request; 5 | 6 | public class EmptyHandlerConfig : AbstractHandlerConfig 7 | { 8 | public EmptyHandlerConfig(AppContext context) 9 | : base(context) 10 | { 11 | } 12 | 13 | public override IEnumerable Handlers 14 | { 15 | get { yield break; } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/SinglePropertyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | using System; 4 | 5 | public class SinglePropertyValue : PropertyValue 6 | { 7 | public SinglePropertyValue(Type type, string rawValue, SingleValueKind kind) 8 | : base(type) 9 | { 10 | RawValue = rawValue; 11 | Kind = kind; 12 | } 13 | 14 | public string RawValue { get; } 15 | 16 | public SingleValueKind Kind { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Owin/FrameworkVersion.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Owin 2 | { 3 | /// 4 | /// Exposes platform info the app was build for. 5 | /// The values should match the TargetFrameworks from csproj file. 6 | /// 7 | public class FrameworkVersion 8 | { 9 | #if NET45 10 | public const string Value = ".NET Framework 4.5"; 11 | #elif NET452 12 | public const string Value = ".NET Framework 4.5.2"; 13 | #else 14 | public const string Value = ".NET Standard 2.0"; 15 | #endif 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/FrameworkVersion.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web 2 | { 3 | /// 4 | /// Exposes platform info the app was build for. 5 | /// The values should match the TargetFrameworks from csproj file. 6 | /// 7 | public class FrameworkVersion 8 | { 9 | #if NET40 10 | public const string Value = ".NET Framework 4.0"; 11 | #elif NET45 12 | public const string Value = ".NET Framework 4.5"; 13 | #else 14 | public const string Value = ".NET Framework 4.5.2"; 15 | #endif 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/index_sm.scss: -------------------------------------------------------------------------------- 1 | @mixin styles { 2 | .job-group-wrapper:last-child .job-wrapper:last-child .data-row-trigger:last-child { 3 | .primary-data { 4 | border-bottom: 1px solid #DDDDDD; 5 | } 6 | } 7 | .triggers:last-child .data-row-trigger:last-child .primary-data { 8 | //border-bottom: 1px solid #DDDDDD; 9 | } 10 | 11 | .jobs:last-child .triggers:last-child .data-row-trigger:last-child .timeline-data { 12 | //border-bottom: none; 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/GetDataCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class GetDataCommand : AbstractOperationCommand 7 | { 8 | public GetDataCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 9 | { 10 | } 11 | 12 | protected override Task PerformOperation(NoInput input) 13 | { 14 | return AsyncUtils.CompletedTask(); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "jsxSingleQuote": false, 5 | "trailingComma": "es5", 6 | "printWidth": 100, 7 | "tabWidth": 2, 8 | "useTabs": false, 9 | "bracketSpacing": true, 10 | "jsxBracketSameLine": false, 11 | "arrowParens": "always", 12 | "endOfLine": "lf", 13 | "importOrder": ["^react$", "^@?\\w", "^@/", "^[../]", "^[./]"], 14 | "importOrderSeparation": true, 15 | "importOrderSortSpecifiers": true, 16 | "plugins": ["@ianvs/prettier-plugin-sort-imports"] 17 | } 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Tests/Stubs/CommandResultExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Tests.Stubs 2 | { 3 | using CrystalQuartz.WebFramework.Commands; 4 | using NUnit.Framework; 5 | 6 | public static class CommandResultExtensions 7 | { 8 | public static void AssertSuccessfull(this CommandResult result) 9 | { 10 | if (!result.Success) 11 | { 12 | Assert.Fail("Expected successfull result but got error: " + result.ErrorMessage); 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/post/title.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.link){ %> 2 |

3 | 4 |

5 | <% } else if (post.title){ %> 6 | <% if (index){ %> 7 |

8 | <%= post.title %> 9 |

10 | <% } else { %> 11 |

12 | <%= post.title %> 13 |

14 | <% } %> 15 | <% } %> -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-content/nullable-date-view.ts: -------------------------------------------------------------------------------- 1 | import { NullableDate } from '../api'; 2 | import DateUtils from '../utils/date'; 3 | 4 | export class NullableDateView implements js.IView { 5 | template = ''; 6 | 7 | init(dom: js.IDom, value: NullableDate) { 8 | if (value.isEmpty()) { 9 | dom.$.append('[none]'); 10 | } else { 11 | dom.$.append(DateUtils.smartDateFormat(value.getDate()) || ' '); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/timers/timer.ts: -------------------------------------------------------------------------------- 1 | import { Disposable } from 'john-smith/common'; 2 | 3 | export class Timer implements Disposable { 4 | private _ref: number | null = null; 5 | 6 | public schedule(action: () => void, delay: number) { 7 | this.reset(); 8 | this._ref = setTimeout(action, delay) as unknown as number; 9 | } 10 | 11 | public reset() { 12 | if (this._ref) { 13 | clearTimeout(this._ref); 14 | this._ref = null; 15 | } 16 | } 17 | 18 | public dispose() { 19 | this.reset(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/schedule-job/steps/configuration-step.ts: -------------------------------------------------------------------------------- 1 | import {Validators} from '../../common/validation/validators'; 2 | 3 | export interface ConfigurationStepData { 4 | groupName: string|null; 5 | jobName: string|null; 6 | jobClass: string|null; 7 | } 8 | 9 | export interface ConfigurationStep { 10 | code: string; 11 | navigationLabel: string; 12 | onEnter?: (data: ConfigurationStepData) => ConfigurationStepData; 13 | onLeave?: (data: ConfigurationStepData) => ConfigurationStepData; 14 | validators?: Validators; 15 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": false, 4 | "emitDecoratorMetadata": true, 5 | "experimentalDecorators": true, 6 | "lib": [ "es6", "dom" ], 7 | "mapRoot": "./", 8 | "module": "es6", 9 | "allowSyntheticDefaultImports": true, 10 | "moduleResolution": "node", 11 | //"outDir": "../dist/out-tsc", 12 | "sourceMap": true, 13 | "target": "es5", 14 | "typeRoots": [ 15 | "../node_modules/@types" 16 | ], 17 | "types": [ 18 | "node" 19 | ] 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/schedule-job/steps/configuration-step.ts: -------------------------------------------------------------------------------- 1 | import { Validators } from '../../common/validation/validators'; 2 | 3 | export interface ConfigurationStepData { 4 | groupName: string | null; 5 | jobName: string | null; 6 | jobClass: string | null; 7 | } 8 | 9 | export interface ConfigurationStep { 10 | code: string; 11 | navigationLabel: string; 12 | onEnter?: (data: ConfigurationStepData) => ConfigurationStepData; 13 | onLeave?: (data: ConfigurationStepData) => ConfigurationStepData; 14 | validators?: Validators; 15 | } 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Views/Home/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewBag.Title = "Contact"; 3 | } 4 |

@ViewBag.Title.

5 |

@ViewBag.Message

6 | 7 |
8 | One Microsoft Way
9 | Redmond, WA 98052-6399
10 | P: 11 | 425.555.0100 12 |
13 | 14 |
15 | Support: Support@example.com
16 | Marketing: Marketing@example.com 17 |
-------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/EnvironmentDataOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using CrystalQuartz.WebFramework.Commands; 4 | 5 | public class EnvironmentDataOutput : CommandResult 6 | { 7 | public string SelfVersion { get; set; } = default!; 8 | 9 | public string QuartzVersion { get; set; } = default!; 10 | 11 | public string DotNetVersion { get; set; } = default!; 12 | 13 | public string? CustomCssUrl { get; set; } 14 | 15 | public int TimelineSpan { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Tests/Services/ExceptionTraversing/NoopExceptionTransformerTests.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Tests.Services.ExceptionTraversing 2 | { 3 | using System; 4 | using CrystalQuartz.Core.Services.ExceptionTraversing; 5 | using NUnit.Framework; 6 | 7 | [TestFixture] 8 | public class NoopExceptionTransformerTests 9 | { 10 | [Test] 11 | public void Transform_AnyException_ShouldReturnNull() 12 | { 13 | Assert.That(new NoopExceptionTransformer().Transform(new Exception()), Is.Null); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/validation/validator-view.ts: -------------------------------------------------------------------------------- 1 | export class ValidationError implements js.IView { 2 | template = '
  • '; 3 | 4 | init(dom: js.IDom, viewModel: string) { 5 | dom('li').observes(viewModel); 6 | } 7 | } 8 | 9 | export class ValidatorView implements js.IView<{ errors: js.IObservable }> { 10 | template = '
      '; 11 | init(dom: js.IDom, viewModel: { errors: js.IObservable }) { 12 | dom('ul').observes(viewModel.errors, ValidationError); 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/EnumerablePropertyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | using System; 4 | 5 | public class EnumerablePropertyValue : PropertyValue 6 | { 7 | public EnumerablePropertyValue(Type type, PropertyValue[] items, bool itemsOverflow = false) 8 | : base(type) 9 | { 10 | Items = items; 11 | ItemsOverflow = itemsOverflow; 12 | } 13 | 14 | public PropertyValue[] Items { get; } 15 | 16 | public bool ItemsOverflow { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Stubs/AllowedJobTypesRegistryStub.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Stubs 2 | { 3 | using System; 4 | using System.Threading.Tasks; 5 | using CrystalQuartz.Core.Services; 6 | 7 | public class AllowedJobTypesRegistryStub : IAllowedJobTypesRegistry 8 | { 9 | private readonly Type[] _types; 10 | 11 | public AllowedJobTypesRegistryStub(Type[] types) 12 | { 13 | _types = types; 14 | } 15 | 16 | public Task List() 17 | { 18 | return Task.FromResult(_types); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model ContactModel 3 | @{ 4 | ViewData["Title"] = "Contact"; 5 | } 6 |

      @ViewData["Title"]

      7 |

      @Model.Message

      8 | 9 |
      10 | One Microsoft Way
      11 | Redmond, WA 98052-6399
      12 | P: 13 | 425.555.0100 14 |
      15 | 16 |
      17 | Support: Support@example.com
      18 | Marketing: Marketing@example.com 19 |
      20 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework.AspNetCore/CrystalQuartz.WebFramework.AspNetCore.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | PackageReference 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Utils/StandardStreamWriterSessionProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Utils 2 | { 3 | using System; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | public class StandardStreamWriterSessionProvider : IStreamWriterSessionProvider 8 | { 9 | public async Task UseWriter(Stream output, Func payload) 10 | { 11 | using StreamWriter writer = new StreamWriter(output); 12 | { 13 | await payload.Invoke(writer); 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/command-progress/index.less: -------------------------------------------------------------------------------- 1 | .progress-indicator { 2 | width: 50%; 3 | float: left; 4 | display: none; 5 | margin-top: 3px; 6 | height: @loading-image-width; 7 | 8 | div { 9 | width: 200px; 10 | margin: 0 auto; 11 | } 12 | 13 | img, p { 14 | float: left; 15 | } 16 | 17 | img { 18 | margin-left: 5px; 19 | } 20 | 21 | p { 22 | display: inline; 23 | color: #FFFFFF; 24 | font-size: 11px; 25 | line-height: 24px; 26 | margin-left: 3px; 27 | } 28 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/DeleteJobCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class DeleteJobCommand : AbstractOperationCommand 7 | { 8 | public DeleteJobCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 9 | { 10 | } 11 | 12 | protected override async Task PerformOperation(JobInput input) 13 | { 14 | await SchedulerHost.Commander.DeleteJob(input.Job, input.Group); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectInput/FixedInputVariantsProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectInput 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class FixedInputVariantsProvider : IInputVariantsProvider 6 | { 7 | private readonly InputVariant[] _variants; 8 | 9 | public FixedInputVariantsProvider(params InputVariant[] variants) 10 | { 11 | _variants = variants; 12 | } 13 | 14 | public IEnumerable GetVariants() 15 | { 16 | return _variants; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/DeleteGroupCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class DeleteGroupCommand : AbstractOperationCommand 7 | { 8 | public DeleteGroupCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 9 | { 10 | } 11 | 12 | protected override async Task PerformOperation(GroupInput input) 13 | { 14 | await SchedulerHost.Commander.DeleteJobGroup(input.Group); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/ExecuteNowCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class ExecuteNowCommand : AbstractOperationCommand 7 | { 8 | public ExecuteNowCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 9 | { 10 | } 11 | 12 | protected override async Task PerformOperation(JobInput input) 13 | { 14 | await SchedulerHost.Commander.ExecuteNow(input.Job, input.Group); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/PauseTriggerCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class PauseTriggerCommand : AbstractOperationCommand 7 | { 8 | public PauseTriggerCommand(ISchedulerHostProvider schedulerHost) : base(schedulerHost) 9 | { 10 | } 11 | 12 | protected override async Task PerformOperation(TriggerInput input) 13 | { 14 | await SchedulerHost.Commander.PauseTrigger(input.Trigger, input.Group); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/SchedulerProviders/FuncSchedulerProvider.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.SchedulerProviders 2 | { 3 | using System; 4 | using CrystalQuartz.Core.Contracts; 5 | 6 | public class FuncSchedulerProvider : ISchedulerProvider 7 | { 8 | private readonly Func _factory; 9 | 10 | public FuncSchedulerProvider(Func factory) 11 | { 12 | _factory = factory; 13 | } 14 | 15 | public object CreateScheduler(ISchedulerEngine engine) 16 | { 17 | return _factory.Invoke(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "crystal-quartz-docs", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "generate": "hexo generate", 8 | "server": "hexo clean & hexo server" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "hexo": { 13 | "version": "6.3.0" 14 | }, 15 | "dependencies": { 16 | "hexo": "^6.3.0", 17 | "hexo-generator-category": "^2.0.0", 18 | "hexo-renderer-ejs": "^2.0.0", 19 | "hexo-renderer-less": "^4.0.0", 20 | "hexo-renderer-marked": "^6.0.0", 21 | "hexo-server": "^3.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/property-view.ts: -------------------------------------------------------------------------------- 1 | import { Property, PropertyType } from './property'; 2 | 3 | import formatter from './value-formatting'; 4 | 5 | export default class PropertyView implements js.IView { 6 | template = 7 | ` 8 | 9 | 10 | `; 11 | 12 | init(dom: js.IDom, viewModel: Property): void { 13 | dom('.js_title').observes(viewModel.title); 14 | 15 | dom('.js_value').observes(formatter.format(viewModel.value, viewModel.valueType), { encode: false }); 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/select-option-view.ts: -------------------------------------------------------------------------------- 1 | import {SelectOption} from './select-option'; 2 | 3 | export class SelectOptionView implements js.IView { 4 | template = ''; 5 | 6 | init(dom: js.IDom, viewModel: SelectOption | string) { 7 | const $option = dom('option'); 8 | 9 | const actualOption: SelectOption = (typeof viewModel === 'string') ? { title: viewModel, value: viewModel } : viewModel; 10 | 11 | $option.$.prop('value', actualOption.value); 12 | $option.$.text(actualOption.title); 13 | } 14 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Request/FileRequestHandler.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Request 2 | { 3 | using System.Reflection; 4 | using CrystalQuartz.WebFramework.HttpAbstractions; 5 | 6 | public class FileRequestHandler : AbstractFileRequestHandler 7 | { 8 | public FileRequestHandler(Assembly resourcesAssembly, string resourcePrefix) 9 | : base(resourcesAssembly, resourcePrefix) 10 | { 11 | } 12 | 13 | protected override string? GetPath(IRequest request) 14 | { 15 | return request["path"]; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CommonAssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | using System.Reflection; 11 | 12 | [assembly: AssemblyProductAttribute("CrystalQuartz")] 13 | [assembly: AssemblyVersionAttribute("7.2.0.0")] 14 | [assembly: AssemblyFileVersionAttribute("7.2.0.0")] 15 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/offline-mode/offline-mode-container.tsx: -------------------------------------------------------------------------------- 1 | import { Listenable } from 'john-smith/reactive'; 2 | import { Value } from 'john-smith/view/components/value'; 3 | import { OfflineModeView } from './offline-mode-view'; 4 | import { OfflineModeViewModel } from './offline-mode-view-model'; 5 | 6 | export type OfflineModeContainerModel = { 7 | offlineMode: Listenable; 8 | }; 9 | 10 | export const OfflineModeContainerView = (viewModel: OfflineModeContainerModel) => ( 11 | 12 | ); 13 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Outputs/TriggerDetailsOutput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Outputs 2 | { 3 | using CrystalQuartz.Core.Domain; 4 | using CrystalQuartz.Core.Domain.Activities; 5 | using CrystalQuartz.Core.Domain.ObjectTraversing; 6 | using CrystalQuartz.WebFramework.Commands; 7 | 8 | public class TriggerDetailsOutput : CommandResult 9 | { 10 | public TriggerData? TriggerData { get; set; } 11 | 12 | public TriggerSecondaryData? TriggerSecondaryData { get; set; } 13 | 14 | public PropertyValue? JobDataMap { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/effects.less: -------------------------------------------------------------------------------- 1 | .effects-shake { 2 | animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; 3 | transform: translate3d(0, 0, 0); 4 | backface-visibility: hidden; 5 | perspective: 1000px; 6 | } 7 | 8 | @keyframes shake { 9 | 10%, 90% { 10 | transform: translate3d(-1px, 0, 0); 11 | } 12 | 13 | 20%, 80% { 14 | transform: translate3d(2px, 0, 0); 15 | } 16 | 17 | 30%, 50%, 70% { 18 | transform: translate3d(-4px, 0, 0); 19 | } 20 | 21 | 40%, 60% { 22 | transform: translate3d(4px, 0, 0); 23 | } 24 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/effects.scss: -------------------------------------------------------------------------------- 1 | .effects-shake { 2 | animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; 3 | transform: translate3d(0, 0, 0); 4 | backface-visibility: hidden; 5 | perspective: 1000px; 6 | } 7 | 8 | @keyframes shake { 9 | 10%, 90% { 10 | transform: translate3d(-1px, 0, 0); 11 | } 12 | 13 | 20%, 80% { 14 | transform: translate3d(2px, 0, 0); 15 | } 16 | 17 | 30%, 50%, 70% { 18 | transform: translate3d(-4px, 0, 0); 19 | } 20 | 21 | 40%, 60% { 22 | transform: translate3d(4px, 0, 0); 23 | } 24 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore3/Demo.Quartz3.DotNetCore3.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/DeleteTriggerCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class DeleteTriggerCommand : AbstractOperationCommand 7 | { 8 | public DeleteTriggerCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 9 | { 10 | } 11 | 12 | protected override async Task PerformOperation(TriggerInput input) 13 | { 14 | await SchedulerHost.Commander.DeleteTrigger(input.Trigger, input.Group); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/ResumeTriggerCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | 6 | public class ResumeTriggerCommand : AbstractOperationCommand 7 | { 8 | public ResumeTriggerCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 9 | { 10 | } 11 | 12 | protected override async Task PerformOperation(TriggerInput input) 13 | { 14 | await SchedulerHost.Commander.ResumeTrigger(input.Trigger, input.Group); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/nullable-date-view.tsx: -------------------------------------------------------------------------------- 1 | import { View } from 'john-smith/view'; 2 | import { NullableDate } from '../../api'; 3 | import DateUtils from '../../utils/date'; 4 | 5 | export class NullableDateView implements View { 6 | public constructor(private readonly viewModel: NullableDate) {} 7 | 8 | public template = () => ( 9 | 10 | {this.viewModel.isEmpty ? ( 11 | [none] 12 | ) : ( 13 | DateUtils.smartDateFormat(this.viewModel.date!) || ' ' 14 | )} 15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/ObjectPropertyValue.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | using System; 4 | 5 | public class ObjectPropertyValue : PropertyValue 6 | { 7 | public ObjectPropertyValue(Type type, Property[] nestedProperties, bool propertiesOverflow = false) 8 | : base(type) 9 | { 10 | NestedProperties = nestedProperties; 11 | PropertiesOverflow = propertiesOverflow; 12 | } 13 | 14 | public Property[] NestedProperties { get; } 15 | 16 | public bool PropertiesOverflow { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Owin452/SchedulerEngineProviders.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using CrystalQuartz.Core.Contracts; 4 | using CrystalQuartz.Core.Quartz2; 5 | using CrystalQuartz.Core.Quartz3; 6 | 7 | namespace CrystalQuartz.Owin 8 | { 9 | public static class SchedulerEngineProviders 10 | { 11 | public static readonly IDictionary> SchedulerEngineResolvers = new Dictionary> 12 | { 13 | { 2, () => new Quartz2SchedulerEngine() }, 14 | { 3, () => new Quartz3SchedulerEngine() } 15 | }; 16 | } 17 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web452/SchedulerEngineProviders.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using CrystalQuartz.Core.Contracts; 4 | using CrystalQuartz.Core.Quartz2; 5 | using CrystalQuartz.Core.Quartz3; 6 | 7 | namespace CrystalQuartz.Web 8 | { 9 | public static class SchedulerEngineProviders 10 | { 11 | public static readonly IDictionary> SchedulerEngineResolvers = new Dictionary> 12 | { 13 | { 2, () => new Quartz2SchedulerEngine() }, 14 | { 3, () => new Quartz3SchedulerEngine() } 15 | }; 16 | } 17 | } -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/google-analytics.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.google_analytics){ %> 2 | 3 | 13 | 14 | <% } %> 15 | -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteServer/Default.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CqSamples.Quartz3.SystemWeb.RemoteServer.Default" %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
      11 |
      12 |

      Foo Site

      13 | View CrystalQuartz Panel → 14 |
      15 |
      16 | 17 | 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/actions/action.ts: -------------------------------------------------------------------------------- 1 | export default class Action { 2 | disabled = new js.ObservableValue(); 3 | 4 | constructor( 5 | public title: string, 6 | private callback: () => void, 7 | private confirmMessage?: string) { } 8 | 9 | set enabled(value: boolean) { 10 | this.disabled.setValue(!value); 11 | } 12 | 13 | get isDanger() { 14 | return !!this.confirmMessage; 15 | } 16 | 17 | execute() { 18 | if (!this.confirmMessage || confirm(this.confirmMessage)) { 19 | this.callback(); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Request/RequestHandlingResult.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Request 2 | { 3 | using CrystalQuartz.WebFramework.HttpAbstractions; 4 | 5 | public class RequestHandlingResult 6 | { 7 | public RequestHandlingResult(bool isHandled, Response response) 8 | { 9 | IsHandled = isHandled; 10 | Response = response; 11 | } 12 | 13 | public static RequestHandlingResult NotHandled { get; } = new RequestHandlingResult(false, null); 14 | 15 | public bool IsHandled { get; } 16 | 17 | public Response Response { get; } 18 | } 19 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Pages/Error.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Mvc.RazorPages; 7 | 8 | namespace Demo.Quartz3.DotNetCore.Pages 9 | { 10 | public class ErrorModel : PageModel 11 | { 12 | public string RequestId { get; set; } 13 | 14 | public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); 15 | 16 | public void OnGet() 17 | { 18 | RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core.Quartz2/AsyncUtils.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Quartz2 2 | { 3 | using System.Threading.Tasks; 4 | 5 | public static class AsyncUtils 6 | { 7 | public static Task FromResult(T result) 8 | { 9 | #if NET40 10 | return TaskEx.FromResult(result); 11 | #else 12 | return Task.FromResult(result); 13 | #endif 14 | } 15 | 16 | public static Task CompletedTask() 17 | { 18 | #if NET40 19 | return TaskEx.FromResult(null); 20 | #else 21 | return Task.FromResult(null); 22 | #endif 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/scheduler-details.ts: -------------------------------------------------------------------------------- 1 | import { TypeInfo } from './type-info'; 2 | 3 | export interface SchedulerDetails { 4 | InStandbyMode: boolean; 5 | JobStoreClustered: boolean; 6 | JobStoreSupportsPersistence: boolean; 7 | JobStoreType: TypeInfo | null; 8 | NumberOfJobsExecuted: number; 9 | RunningSince: number | null; 10 | SchedulerInstanceId: string; 11 | SchedulerName: string; 12 | SchedulerRemote: boolean; 13 | SchedulerType: TypeInfo | null; 14 | Shutdown: boolean; 15 | Started: boolean; 16 | ThreadPoolSize: number; 17 | ThreadPoolType: TypeInfo | null; 18 | Version: string; 19 | } 20 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/SystemWebRequest.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web 2 | { 3 | using System.Collections.Generic; 4 | using System.Web; 5 | using CrystalQuartz.WebFramework.HttpAbstractions; 6 | 7 | public class SystemWebRequest : IRequest 8 | { 9 | private readonly HttpContext _httpContext; 10 | 11 | public SystemWebRequest(HttpContext httpContext) 12 | { 13 | _httpContext = httpContext; 14 | } 15 | 16 | public IEnumerable AllKeys => _httpContext.Request.Params.AllKeys; 17 | 18 | public string this[string key] => _httpContext.Request.Params[key]; 19 | } 20 | } -------------------------------------------------------------------------------- /examples/07_Quartz3_SystemWeb_Simple/CrystalQuartz.Samples.Quartz3.SystemWeb.Simple/Default.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CrystalQuartz.Samples.Quartz3.SystemWeb.Simple.Default" %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
      11 |
      12 |

      Foo Site

      13 | View CrystalQuartz Panel → 14 |
      15 |
      16 | 17 | 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/Activities/JobData.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.Activities 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class JobData : ActivityNode 6 | { 7 | public JobData(string name, string group, IList triggers) 8 | : base(name, triggers) 9 | { 10 | Triggers = triggers; 11 | GroupName = group; 12 | } 13 | 14 | public IList Triggers { get; } 15 | 16 | public string GroupName { get; } 17 | 18 | public string UniqueName => string.Format("{0}_{1}", GroupName, Name); 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectInput/InputVariant.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectInput 2 | { 3 | public class InputVariant 4 | { 5 | public InputVariant(string value, string label) 6 | { 7 | Value = value; 8 | Label = label; 9 | } 10 | 11 | /// 12 | /// Gets input raw value to be passed to the 13 | /// converter. 14 | /// 15 | public string Value { get; } 16 | 17 | /// 18 | /// Gets input variant friendly name. 19 | /// 20 | public string Label { get; } 21 | } 22 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Stubs/TriggerStub.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Stubs 2 | { 3 | using System.Collections.Generic; 4 | using CrystalQuartz.Core.Domain.TriggerTypes; 5 | 6 | public class TriggerStub 7 | { 8 | public TriggerStub(string name, TriggerType trigger, IDictionary triggerJobData) 9 | { 10 | Name = name; 11 | Trigger = trigger; 12 | TriggerJobData = triggerJobData; 13 | } 14 | 15 | public string Name { get; } 16 | 17 | public TriggerType Trigger { get; } 18 | 19 | public IDictionary TriggerJobData { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Global.asax.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.CustomStyling 2 | { 3 | using System.Web.Mvc; 4 | using System.Web.Optimization; 5 | using System.Web.Routing; 6 | 7 | public class MvcApplication : System.Web.HttpApplication 8 | { 9 | protected void Application_Start() 10 | { 11 | AreaRegistration.RegisterAllAreas(); 12 | FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 13 | RouteConfig.RegisterRoutes(RouteTable.Routes); 14 | BundleConfig.RegisterBundles(BundleTable.Bundles); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.AspNetCore/SchedulerEngineProviders.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.AspNetCore 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using CrystalQuartz.Core.Contracts; 6 | using CrystalQuartz.Core.Quartz2; 7 | using CrystalQuartz.Core.Quartz3; 8 | 9 | public static class SchedulerEngineProviders 10 | { 11 | public static readonly IDictionary> SchedulerEngineResolvers = new Dictionary> 12 | { 13 | { 2, () => new Quartz2SchedulerEngine() }, 14 | { 3, () => new Quartz3SchedulerEngine() }, 15 | }; 16 | } 17 | } -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/Startup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Owin; 2 | using Owin; 3 | 4 | [assembly: OwinStartupAttribute(typeof(CrystalQuartz.Samples.OwinRemote.Startup))] 5 | namespace CrystalQuartz.Samples.OwinRemote 6 | { 7 | using CrystalQuartz.Core.SchedulerProviders; 8 | using CrystalQuartz.Owin; 9 | 10 | public class Startup 11 | { 12 | public void Configuration(IAppBuilder app) 13 | { 14 | app.UseCrystalQuartz(new RemoteSchedulerProvider 15 | { 16 | SchedulerHost = "tcp://localhost:555/QuartzScheduler" 17 | }); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/errors-view.tsx: -------------------------------------------------------------------------------- 1 | import { List } from 'john-smith/view/components'; 2 | import { ErrorMessage } from '../../api'; 3 | import 'john-smith/view'; 4 | 5 | export const ErrorsView = (errors: ErrorMessage[]) => ( 6 |
      7 |
      Errors
      8 |
        9 | ( 11 |
      • 12 | {errorMessage.text} 13 |
      • 14 | )} 15 | model={errors} 16 | >
        17 |
      18 |
      19 | ); 20 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Contracts/SchedulerServices.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Contracts 2 | { 3 | public class SchedulerServices 4 | { 5 | public SchedulerServices( 6 | ISchedulerClerk clerk, 7 | ISchedulerCommander commander, 8 | ISchedulerEventSource? eventSource) 9 | { 10 | Clerk = clerk; 11 | Commander = commander; 12 | EventSource = eventSource; 13 | } 14 | 15 | public ISchedulerClerk Clerk { get; } 16 | 17 | public ISchedulerCommander Commander { get; } 18 | 19 | public ISchedulerEventSource? EventSource { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/utils/view/smooth-unrender.ts: -------------------------------------------------------------------------------- 1 | import { Listenable, ObservableValue } from 'john-smith/reactive'; 2 | import { OnUnrender } from 'john-smith/view/hooks'; 3 | 4 | export class SmoothUnrenderHandler implements OnUnrender { 5 | private readonly _removing = new ObservableValue(false); 6 | 7 | public removing: Listenable = this._removing; 8 | 9 | public constructor(private readonly _duration: number = 1000) {} 10 | 11 | public onUnrender(unrender: () => void): void { 12 | this._removing.setValue(true); 13 | 14 | setTimeout(() => { 15 | unrender(); 16 | }, this._duration); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/common_sm.scss: -------------------------------------------------------------------------------- 1 | @use "global/constants" as c; 2 | 3 | @mixin styles { 4 | .main-container { 5 | padding-top: c.$main-header-primary-height + 2 * c.$main-header-secondary-height; 6 | } 7 | 8 | .data-header .primary-data, 9 | .data-header .ticks-container, 10 | .data-row .primary-data { 11 | width: 100%; 12 | float: none; 13 | position: relative; 14 | } 15 | 16 | .data-row.data-row-trigger { 17 | height: c.$data-row-height + c.$timeline-row-height-sm; 18 | } 19 | 20 | .data-row .dropdown-menu { 21 | right: 0; 22 | left: auto; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Serialization/JobTypesOutputSerializer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Serialization 2 | { 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | using Outputs; 6 | 7 | public class JobTypesOutputSerializer : CommandResultSerializerBase 8 | { 9 | protected override async Task SerializeSuccessData(JobTypesOutput target, TextWriter output) 10 | { 11 | await output.WriteAsync(','); 12 | await output.WritePropertyName("i"); 13 | await output.WriteArray(target.AllowedTypes, CommonSerializers.TypeSerializer); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web.Demo/Default.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CrystalQuartz.Web.Demo._Default" %> 2 | 3 | 4 | 5 | 6 | 7 | Foo Site 8 | 9 | 10 |
      11 |
      12 |

      Foo Site

      13 | View CrystalQuartz Panel → 14 |
      15 |
      16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Demo.Quartz3.DotNetCore.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | netcoreapp3.0 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/wwwroot/lib/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ], 14 | "homepage": "https://github.com/jquery/jquery-dist", 15 | "version": "2.2.0", 16 | "_release": "2.2.0", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "2.2.0", 20 | "commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5" 21 | }, 22 | "_source": "git://github.com/jquery/jquery-dist.git", 23 | "_target": "2.2.0", 24 | "_originalSource": "jquery" 25 | } -------------------------------------------------------------------------------- /examples/02_Owin_Web_Simple/CrystalQuartz.Samples.OwinSimple/Content/Site.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | /* Set padding to keep content from hitting the edges */ 7 | .body-content { 8 | padding-left: 15px; 9 | padding-right: 15px; 10 | } 11 | 12 | /* Override the default bootstrap behavior where horizontal description lists 13 | will truncate terms that are too long to fit in the left column 14 | */ 15 | .dl-horizontal dt { 16 | white-space: normal; 17 | } 18 | 19 | /* Set width on the form input elements since they're 100% wide by default */ 20 | input, 21 | select, 22 | textarea { 23 | max-width: 280px; 24 | } 25 | -------------------------------------------------------------------------------- /examples/03_Owin_Web_Remote/CrystalQuartz.Samples.OwinRemote/Content/Site.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | /* Set padding to keep content from hitting the edges */ 7 | .body-content { 8 | padding-left: 15px; 9 | padding-right: 15px; 10 | } 11 | 12 | /* Override the default bootstrap behavior where horizontal description lists 13 | will truncate terms that are too long to fit in the left column 14 | */ 15 | .dl-horizontal dt { 16 | white-space: normal; 17 | } 18 | 19 | /* Set width on the form input elements since they're 100% wide by default */ 20 | input, 21 | select, 22 | textarea { 23 | max-width: 280px; 24 | } 25 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.CustomStyling 2 | { 3 | using System.Web.Mvc; 4 | using System.Web.Routing; 5 | 6 | public class RouteConfig 7 | { 8 | public static void RegisterRoutes(RouteCollection routes) 9 | { 10 | routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 11 | 12 | routes.MapRoute( 13 | name: "Default", 14 | url: "{controller}/{action}/{id}", 15 | defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 16 | ); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Content/Site.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | /* Set padding to keep content from hitting the edges */ 7 | .body-content { 8 | padding-left: 15px; 9 | padding-right: 15px; 10 | } 11 | 12 | /* Override the default bootstrap behavior where horizontal description lists 13 | will truncate terms that are too long to fit in the left column 14 | */ 15 | .dl-horizontal dt { 16 | white-space: normal; 17 | } 18 | 19 | /* Set width on the form input elements since they're 100% wide by default */ 20 | input, 21 | select, 22 | textarea { 23 | max-width: 280px; 24 | } 25 | -------------------------------------------------------------------------------- /docs/themes/custom/layout/_partial/article-short.ejs: -------------------------------------------------------------------------------- 1 |
      2 |
      3 | <%- partial('post/title', {class_name: 'article-title'}) %> 4 |
      5 | 6 |
      7 |
      8 | <%- post.excerpt %> 9 | <% if (theme.excerpt_link){ %> 10 |

      11 | <%= theme.excerpt_link %> 12 |

      13 | <% } %> 14 |
      15 |
      16 |
      -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/api/scheduler-event.ts: -------------------------------------------------------------------------------- 1 | import { ErrorMessage } from './error-message'; 2 | import { SchedulerEventScope } from './scheduler-event-scope'; 3 | import { SchedulerEventType } from './scheduler-event-type'; 4 | 5 | export class SchedulerEvent { 6 | public constructor( 7 | public readonly id: number, 8 | public readonly date: number, 9 | public readonly scope: SchedulerEventScope, 10 | public readonly eventType: SchedulerEventType, 11 | public readonly itemKey: string, 12 | public readonly fireInstanceId: string, 13 | public readonly faulted: boolean, 14 | public readonly errors: ErrorMessage[] | null 15 | ) {} 16 | } 17 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/HttpAbstractions/Response.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.HttpAbstractions 2 | { 3 | using System; 4 | using System.IO; 5 | using System.Threading.Tasks; 6 | 7 | public class Response 8 | { 9 | public Response(string contentType, int statusCode, Func contentFiller) 10 | { 11 | ContentType = contentType; 12 | StatusCode = statusCode; 13 | ContentFiller = contentFiller; 14 | } 15 | 16 | public string ContentType { get; } 17 | 18 | public int StatusCode { get; } 19 | 20 | public Func ContentFiller { get; } 21 | } 22 | } -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/CqSamples.Quartz3.AspNetCore.Simple.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectTraversing/TraversingOptions.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectTraversing 2 | { 3 | public class TraversingOptions 4 | { 5 | public TraversingOptions( 6 | int maxGraphDepth, 7 | int maxPropertiesCount, 8 | int maxEnumerableLength) 9 | { 10 | MaxGraphDepth = maxGraphDepth; 11 | MaxPropertiesCount = maxPropertiesCount; 12 | MaxEnumerableLength = maxEnumerableLength; 13 | } 14 | 15 | public int MaxGraphDepth { get; } 16 | 17 | public int MaxPropertiesCount { get; } 18 | 19 | public int MaxEnumerableLength { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/global/actions/action.ts: -------------------------------------------------------------------------------- 1 | import { ObservableValue } from 'john-smith/reactive'; 2 | 3 | export default class Action { 4 | public disabled = new ObservableValue(false); 5 | 6 | public constructor( 7 | public title: string, 8 | private callback: () => void, 9 | private confirmMessage?: string 10 | ) {} 11 | 12 | public set enabled(value: boolean) { 13 | this.disabled.setValue(!value); 14 | } 15 | 16 | public get isDanger() { 17 | return !!this.confirmMessage; 18 | } 19 | 20 | public execute() { 21 | if (!this.confirmMessage || confirm(this.confirmMessage)) { 22 | this.callback(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/timeline/timeline-tick-view.tsx: -------------------------------------------------------------------------------- 1 | import { View } from 'john-smith/view'; 2 | import DateUtils from '../utils/date'; 3 | import { ITimelineTickItem } from './common'; 4 | 5 | export default class TimelineTickView implements View { 6 | public constructor(private readonly viewModel: ITimelineTickItem) {} 7 | 8 | public template() { 9 | return ( 10 |
    • 11 | {this.formatDate(new Date(this.viewModel.tickDate))} 12 |
    • 13 | ); 14 | } 15 | 16 | private formatDate(date: number | Date) { 17 | return DateUtils.timeFormat(date); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/CrystalQuartz.Samples.RemoteScheduler/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Binding/DictionaryRequest.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Binding 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using CrystalQuartz.WebFramework.HttpAbstractions; 6 | 7 | public class DictionaryRequest : IRequest 8 | { 9 | private readonly IDictionary _items = new Dictionary(StringComparer.InvariantCultureIgnoreCase); 10 | 11 | public IEnumerable AllKeys => _items.Keys; 12 | 13 | public string? this[string key] 14 | { 15 | get => _items.ContainsKey(key) ? _items[key] : null; 16 | set => _items[key] = value; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /examples/06_CustomStyles/CrystalQuartz.Samples.CustomStyling/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Samples.CustomStyling.Controllers 2 | { 3 | using System.Web.Mvc; 4 | 5 | public class HomeController : Controller 6 | { 7 | public ActionResult Index() 8 | { 9 | return View(); 10 | } 11 | 12 | public ActionResult About() 13 | { 14 | ViewBag.Message = "Your application description page."; 15 | 16 | return View(); 17 | } 18 | 19 | public ActionResult Contact() 20 | { 21 | ViewBag.Message = "Your contact page."; 22 | 23 | return View(); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/GetSchedulerDetailsCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using Inputs; 5 | using Outputs; 6 | 7 | public class GetSchedulerDetailsCommand : AbstractSchedulerCommand 8 | { 9 | public GetSchedulerDetailsCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task InternalExecute(NoInput input, SchedulerDetailsOutput output) 14 | { 15 | output.SchedulerDetails = await SchedulerHost.Clerk.GetSchedulerDetails(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectInput/InputType.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectInput 2 | { 3 | public class InputType 4 | { 5 | public InputType(string code) 6 | : this(code, code) 7 | { 8 | } 9 | 10 | public InputType(string code, string label) 11 | { 12 | Code = code; 13 | Label = label; 14 | } 15 | 16 | /// 17 | /// Gets input type unique code. 18 | /// 19 | public string Code { get; } 20 | 21 | /// 22 | /// Gets friendly input type label. 23 | /// 24 | public string Label { get; } 25 | } 26 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Request/SingleFileRequestHandler.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Request 2 | { 3 | using System.Reflection; 4 | using CrystalQuartz.WebFramework.HttpAbstractions; 5 | 6 | public class SingleFileRequestHandler : AbstractFileRequestHandler 7 | { 8 | private readonly string _path; 9 | 10 | public SingleFileRequestHandler(Assembly resourcesAssembly, string resourcePrefix, string path) 11 | : base(resourcesAssembly, resourcePrefix) 12 | { 13 | _path = path; 14 | } 15 | 16 | protected override string GetPath(IRequest request) 17 | { 18 | return _path; 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /examples/05_SystemWeb_Remote/CrystalQuartz.Samples.RemoteScheduler/Default.aspx: -------------------------------------------------------------------------------- 1 | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CrystalQuartz.Samples.RemoteScheduler._Default" %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
      11 |
      12 |

      Foo Site

      13 | View CrystalQuartz Panel → 14 |
      15 |
      16 | 17 | 18 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/global/constants.less: -------------------------------------------------------------------------------- 1 | /* Constants -> size */ 2 | 3 | @data-row-height: 20px; 4 | @aside-width: 70px; 5 | @main-header-primary-height: 30px; 6 | @main-header-secondary-height: @data-row-height; 7 | @main-footer-height: 20px; 8 | @loading-image-width: 24px; 9 | @timeline-row-height-sm: 10px; 10 | 11 | /* Constants -> colors */ 12 | 13 | @green: #38C049; 14 | @green-dark: #5CB85C; 15 | 16 | @active-light: #E0EFF6; 17 | @active: #058dc7; 18 | 19 | @error: #cb4437; 20 | 21 | @bg-activity-normal: @green-dark; 22 | @bg-activity-normal-hover: darken(@bg-activity-normal, 10%); 23 | @bg-activity-error: lighten(@error, 10%); 24 | @bg-activity-error-hover: darken(@bg-activity-error, 10%); -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Utils/ExceptionHelper.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Utils 2 | { 3 | using System; 4 | using System.Text; 5 | 6 | public static class ExceptionHelper 7 | { 8 | public static string FullMessage(this Exception exception) 9 | { 10 | var messageBuilder = new StringBuilder(); 11 | var currentException = exception; 12 | while (currentException != null) 13 | { 14 | messageBuilder.AppendLine(currentException.Message); 15 | currentException = currentException.InnerException; 16 | } 17 | 18 | return messageBuilder.ToString(); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /examples/CrystalQuarts.Samples.Common/PrintMessageJob.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | 3 | namespace CrystalQuarts.Samples.Common 4 | { 5 | using System; 6 | using Quartz; 7 | 8 | public class PrintMessageJob : IJob 9 | { 10 | private static readonly Random Random = new Random(); 11 | 12 | public void Execute(IJobExecutionContext context) 13 | { 14 | Thread.Sleep(TimeSpan.FromSeconds(Random.Next(1, 20))); 15 | 16 | var color = Console.ForegroundColor; 17 | Console.ForegroundColor = ConsoleColor.DarkYellow; 18 | Console.WriteLine("Greetings from HelloJob!"); 19 | Console.ForegroundColor = color; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-header/scheduler-status.less: -------------------------------------------------------------------------------- 1 | /* Scheduler status */ 2 | 3 | /* todo: share styles with activity-status */ 4 | 5 | .scheduler-status { 6 | float: left; 7 | height: 10px; 8 | width: 10px; 9 | margin: 5px 0 0 10px; 10 | transition: background 1s; 11 | border-radius: 50%; 12 | -moz-border-radius: 50%; 13 | -ms-border-radius: 50%; 14 | -webkit-border-radius: 50%; 15 | 16 | &.empty { 17 | background: #EEEEEE; 18 | } 19 | 20 | &.ready { 21 | background: #E5D45B; 22 | } 23 | 24 | &.started { 25 | background: #38C049; 26 | } 27 | 28 | &.shutdown { 29 | background: #AAAAAA; 30 | } 31 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-header/scheduler-status.scss: -------------------------------------------------------------------------------- 1 | /* Scheduler status */ 2 | 3 | /* todo: share styles with activity-status */ 4 | 5 | .scheduler-status { 6 | float: left; 7 | height: 10px; 8 | width: 10px; 9 | margin: 5px 0 0 10px; 10 | transition: background 1s; 11 | border-radius: 50%; 12 | -moz-border-radius: 50%; 13 | -ms-border-radius: 50%; 14 | -webkit-border-radius: 50%; 15 | 16 | &.empty { 17 | background: #EEEEEE; 18 | } 19 | 20 | &.ready { 21 | background: #E5D45B; 22 | } 23 | 24 | &.started { 25 | background: #38C049; 26 | } 27 | 28 | &.shutdown { 29 | background: #AAAAAA; 30 | } 31 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Web/SchedulerEngineProviders.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Web 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using CrystalQuartz.Core.Contracts; 6 | using CrystalQuartz.Core.Quartz2; 7 | 8 | #if NET452_OR_GREATER 9 | using CrystalQuartz.Core.Quartz3; 10 | #endif 11 | 12 | public static class SchedulerEngineProviders 13 | { 14 | public static readonly IDictionary> SchedulerEngineResolvers = new Dictionary> 15 | { 16 | { 2, () => new Quartz2SchedulerEngine() }, 17 | #if NET452_OR_GREATER 18 | { 3, () => new Quartz3SchedulerEngine() }, 19 | #endif 20 | }; 21 | } 22 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-content/job-group/job-group.tmpl.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 | 5 | 9 | 10 |
      11 |
      12 |
      13 |
      14 | 15 |
      16 |
      17 | 18 |
      -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/timeline/index_sm.less: -------------------------------------------------------------------------------- 1 | .timeline-grid { 2 | left: 0; 3 | 4 | .timeline-grid-item { 5 | border: none; 6 | 7 | div { 8 | border: none; 9 | } 10 | } 11 | } 12 | 13 | .timeline-data { 14 | width: 100%; 15 | float: none; 16 | border-bottom-style: solid; 17 | height: @timeline-row-height-sm; 18 | } 19 | 20 | .timeline-data-filler { 21 | display: none; 22 | } 23 | 24 | .ticks-container { 25 | left: 0; 26 | } 27 | 28 | .timeline-item { 29 | height: 4px; 30 | background: lighten(@green-dark, 20%); 31 | } 32 | 33 | /* Back layer (tooltips, global objects) */ 34 | 35 | .timeline-back-layer { 36 | display: none; 37 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/offline-mode/offline-mode.tmpl.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 |
      5 |
      6 |

      Server is offline since

      7 | 8 |

      Please make sure the server application at is up and running.

      9 | 10 | 14 |
      15 |
      16 |
      -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/job-group/job-group.tmpl.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 | 5 | 9 | 10 |
      11 |
      12 |
      13 |
      14 | 15 |
      16 |
      17 | 18 |
      -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-content/job-group/index.less: -------------------------------------------------------------------------------- 1 | /* Job Group */ 2 | 3 | .data-row-job-group { 4 | .primary-data { 5 | border-right-color: #666666; 6 | } 7 | 8 | .primary-data { 9 | background: #666666; 10 | } 11 | 12 | .data-container { 13 | border-color: #444444; 14 | } 15 | 16 | .data-container .data-group { 17 | color: #FFFFFF; 18 | font-size: 12px; 19 | line-height: 20px; 20 | font-weight: bold; 21 | padding: 0 10px; 22 | } 23 | 24 | .actions-toggle { 25 | color: #CCCCCC; 26 | } 27 | 28 | .actions-toggle:hover { 29 | color: #FFFFFF; 30 | background: #444444; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/main-content/job/index.less: -------------------------------------------------------------------------------- 1 | /* Job */ 2 | 3 | .data-row-job { 4 | .primary-data { 5 | border-bottom: 1px solid #DDDDDD; 6 | background: #E9E9E9; 7 | } 8 | 9 | .data-container { 10 | border-right-color: #CCCCCC; 11 | } 12 | 13 | .data-item { 14 | width: auto; 15 | min-width: 16.667%; 16 | 17 | // As job data-item is the only element at the row so 18 | // give some additional for the ellipsis. 19 | padding-right: 27px; 20 | } 21 | 22 | .actions-toggle { 23 | color: #666666; 24 | } 25 | 26 | .actions-toggle:hover { 27 | color: #333333; 28 | background: #CCCCCC; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/offline-mode/offline-mode.tmpl.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 |
      5 |
      6 |

      Server is offline since

      7 | 8 |

      Please make sure the server application at is up and running.

      9 | 10 | 14 |
      15 |
      16 |
      -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/SchedulerData.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using CrystalQuartz.Core.Domain.Activities; 6 | 7 | public class SchedulerData 8 | { 9 | public string Name { get; set; } 10 | 11 | public string InstanceId { get; set; } 12 | 13 | public IList JobGroups { get; set; } 14 | 15 | public SchedulerStatus Status { get; set; } 16 | 17 | public int JobsTotal { get; set; } 18 | 19 | public int JobsExecuted { get; set; } 20 | 21 | public IList InProgress { get; set; } 22 | 23 | public DateTime? RunningSince { get; set; } 24 | } 25 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/bundleconfig.json: -------------------------------------------------------------------------------- 1 | // Configure bundling and minification for the project. 2 | // More info at https://go.microsoft.com/fwlink/?LinkId=808241 3 | [ 4 | { 5 | "outputFileName": "wwwroot/css/site.min.css", 6 | // An array of relative input file paths. Globbing patterns supported 7 | "inputFiles": [ 8 | "wwwroot/css/site.css" 9 | ] 10 | }, 11 | { 12 | "outputFileName": "wwwroot/js/site.min.js", 13 | "inputFiles": [ 14 | "wwwroot/js/site.js" 15 | ], 16 | // Optionally specify minification options 17 | "minify": { 18 | "enabled": true, 19 | "renameLocals": true 20 | }, 21 | // Optionally generate .map file 22 | "sourceMap": false 23 | } 24 | ] 25 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/job-group/index.scss: -------------------------------------------------------------------------------- 1 | /* Job Group */ 2 | 3 | .data-row-job-group { 4 | .primary-data { 5 | border-right-color: #666666; 6 | } 7 | 8 | .primary-data { 9 | background: #666666; 10 | } 11 | 12 | .data-container { 13 | border-color: #444444; 14 | } 15 | 16 | .data-container .data-group { 17 | color: #FFFFFF; 18 | font-size: 12px; 19 | line-height: 20px; 20 | font-weight: bold; 21 | padding: 0 10px; 22 | } 23 | 24 | .actions-toggle { 25 | color: #CCCCCC; 26 | } 27 | 28 | .actions-toggle:hover { 29 | color: #FFFFFF; 30 | background: #444444; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/job/index.scss: -------------------------------------------------------------------------------- 1 | /* Job */ 2 | 3 | .data-row-job { 4 | .primary-data { 5 | border-bottom: 1px solid #DDDDDD; 6 | background: #E9E9E9; 7 | } 8 | 9 | .data-container { 10 | border-right-color: #CCCCCC; 11 | } 12 | 13 | .data-item { 14 | width: auto; 15 | min-width: 16.667%; 16 | 17 | // As job data-item is the only element at the row so 18 | // give some additional for the ellipsis. 19 | padding-right: 27px; 20 | } 21 | 22 | .actions-toggle { 23 | color: #666666; 24 | } 25 | 26 | .actions-toggle:hover { 27 | color: #333333; 28 | background: #CCCCCC; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Services/IEventsTransformer.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Services 2 | { 3 | using CrystalQuartz.Core.Domain.Events; 4 | 5 | /// 6 | /// Describes events transformation service. 7 | /// 8 | public interface IEventsTransformer 9 | { 10 | /// 11 | /// Transforms raw event emitted by scheduler to actual scheduler 12 | /// instance to be stored by events hub. 13 | /// 14 | /// new id to assign. 15 | /// emitted event. 16 | /// Transformed event. 17 | SchedulerEvent Transform(int id, RawSchedulerEvent rawEvent); 18 | } 19 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/object-browser/index.less: -------------------------------------------------------------------------------- 1 | .object-browser { 2 | table-layout: fixed; 3 | border-bottom: 1px solid #DDDDDD; 4 | width: 100%; 5 | 6 | .property-title, 7 | .property-value { 8 | width: 50%; 9 | font-size: 12px; 10 | padding-top: 3px; 11 | padding-bottom: 3px; 12 | overflow: hidden; 13 | text-overflow: ellipsis; 14 | } 15 | 16 | .property-title { 17 | background: #F8F8F8; 18 | border-right: 1px solid #DDDDDD; 19 | } 20 | 21 | .property-value { 22 | padding-left: 15px; 23 | padding-right: 15px; 24 | 25 | &.error { 26 | color: @error; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Core/Domain/ObjectInput/StandardInputTypeConverter.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Core.Domain.ObjectInput 2 | { 3 | using System; 4 | using System.Globalization; 5 | 6 | public class StandardInputTypeConverter : IInputTypeConverter 7 | { 8 | private readonly CultureInfo _cultureInfo; 9 | private readonly TypeCode _typeCode; 10 | 11 | public StandardInputTypeConverter(CultureInfo cultureInfo, TypeCode typeCode) 12 | { 13 | _cultureInfo = cultureInfo; 14 | _typeCode = typeCode; 15 | } 16 | 17 | public object Convert(string input) 18 | { 19 | return System.Convert.ChangeType(input, _typeCode, _cultureInfo); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore; 7 | using Microsoft.AspNetCore.Hosting; 8 | using Microsoft.Extensions.Configuration; 9 | using Microsoft.Extensions.Logging; 10 | 11 | namespace Demo.Quartz3.DotNetCore 12 | { 13 | public class Program 14 | { 15 | public static void Main(string[] args) 16 | { 17 | BuildWebHost(args).Run(); 18 | } 19 | 20 | public static IWebHost BuildWebHost(string[] args) => 21 | WebHost.CreateDefaultBuilder(args) 22 | .UseStartup() 23 | .Build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/activity-details/object-browser.less: -------------------------------------------------------------------------------- 1 | .object-browser { 2 | table-layout: fixed; 3 | border-bottom: 1px solid #DDDDDD; 4 | width: 100%; 5 | 6 | .property-title, 7 | .property-value { 8 | width: 50%; 9 | font-size: 12px; 10 | padding-top: 3px; 11 | padding-bottom: 3px; 12 | overflow: hidden; 13 | text-overflow: ellipsis; 14 | } 15 | 16 | .property-title { 17 | background: #F8F8F8; 18 | border-right: 1px solid #DDDDDD; 19 | } 20 | 21 | .property-value { 22 | padding-left: 15px; 23 | padding-right: 15px; 24 | 25 | &.error { 26 | color: @error; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/Inputs/AddTriggerInput.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands.Inputs 2 | { 3 | public class AddTriggerInput : JobInput 4 | { 5 | /// 6 | /// New trigger name (optional) 7 | /// 8 | public string? Name { get; set; } 9 | 10 | public string TriggerType { get; set; } = default!; 11 | 12 | public string? CronExpression { get; set; } 13 | 14 | public bool RepeatForever { get; set; } 15 | 16 | public int RepeatCount { get; set; } 17 | 18 | public long RepeatInterval { get; set; } 19 | 20 | public JobDataItem[]? JobDataMap { get; set; } 21 | 22 | public string? JobClass { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.WebFramework/Response/DefaultResponseFiller.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.WebFramework.Response 2 | { 3 | using System.IO; 4 | using System.Threading.Tasks; 5 | using CrystalQuartz.WebFramework.HttpAbstractions; 6 | 7 | public abstract class DefaultResponseFiller : IResponseFiller 8 | { 9 | public virtual string ContentType => "text/html"; 10 | 11 | public virtual int StatusCode => 200; 12 | 13 | public Response FillResponse(IRequest request) 14 | { 15 | return new Response(ContentType, StatusCode, stream => InternalFillResponse(stream, request)); 16 | } 17 | 18 | protected abstract Task InternalFillResponse(Stream outputStream, IRequest request); 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/PauseAllCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class PauseAllCommand : AbstractOperationCommand 8 | { 9 | public PauseAllCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(NoInput input) 14 | { 15 | await SchedulerHost.Commander.PauseAllJobs(); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Scheduler, SchedulerEventType.Paused, null, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/dialog-view-base.ts: -------------------------------------------------------------------------------- 1 | import { IDialogViewModel } from './dialog-view-model'; 2 | 3 | export default abstract class DialogViewBase> implements js.IView { 4 | abstract template: string; 5 | 6 | init(dom: js.IDom, viewModel:T) { 7 | dom('.js_close').on('click').react(viewModel.cancel); /* todo: base class */ 8 | 9 | dom.$.addClass('showing'); 10 | setTimeout(() => { 11 | dom.$.removeClass('showing'); 12 | }, 10); 13 | 14 | dom.onUnrender().listen(() => { 15 | dom.$.addClass('showing'); 16 | setTimeout(() => { 17 | dom.$.remove(); 18 | }, 1000); 19 | }); 20 | } 21 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/ResumeAllCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class ResumeAllCommand : AbstractOperationCommand 8 | { 9 | public ResumeAllCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(NoInput input) 14 | { 15 | await SchedulerHost.Commander.ResumeAllJobs(); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Scheduler, SchedulerEventType.Resumed, null, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/StartSchedulerCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class StartSchedulerCommand : AbstractOperationCommand 8 | { 9 | public StartSchedulerCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(NoInput input) 14 | { 15 | await SchedulerHost.Commander.StartScheduler(); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Scheduler, SchedulerEventType.Resumed, null, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/StopSchedulerCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class StopSchedulerCommand : AbstractOperationCommand 8 | { 9 | public StopSchedulerCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(NoInput input) 14 | { 15 | await SchedulerHost.Commander.StopScheduler(); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Scheduler, SchedulerEventType.Shutdown, null, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteScheduler/PrintMessageJob.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using Quartz; 4 | 5 | namespace CqSamples.Quartz3.SystemWeb.RemoteScheduler 6 | { 7 | public class PrintMessageJob : IJob 8 | { 9 | private static readonly Random Random = new Random(); 10 | 11 | public Task Execute(IJobExecutionContext context) 12 | { 13 | var color = Console.ForegroundColor; 14 | Console.ForegroundColor = ConsoleColor.DarkYellow; 15 | Console.WriteLine("Greetings from HelloJob!"); 16 | Console.ForegroundColor = color; 17 | 18 | return Task.Delay(TimeSpan.FromSeconds(Random.Next(1, 20))); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/PauseGroupCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class PauseGroupCommand : AbstractOperationCommand 8 | { 9 | public PauseGroupCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(GroupInput input) 14 | { 15 | await SchedulerHost.Commander.PauseJobGroup(input.Group); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Group, SchedulerEventType.Paused, input.Group, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/StandbySchedulerCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class StandbySchedulerCommand : AbstractOperationCommand 8 | { 9 | public StandbySchedulerCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(NoInput input) 14 | { 15 | await SchedulerHost.Commander.StandbyScheduler(); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Scheduler, SchedulerEventType.Standby, null, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/show-schedule-job-dialog.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationModel } from '../application-model'; 2 | import { CommandService } from '../services'; 3 | import { IDialogManager } from './dialog-manager'; 4 | import { ScheduleJobOptions, ScheduleJobViewModel } from './schedule-job/schedule-job-view-model'; 5 | 6 | export const SHOW_SCHEDULE_JOB_DIALOG = ( 7 | dialogManager: IDialogManager, 8 | application: ApplicationModel, 9 | commandService: CommandService, 10 | options?: ScheduleJobOptions 11 | ) => { 12 | dialogManager.showModal( 13 | new ScheduleJobViewModel(application, commandService, options), 14 | (result) => { 15 | if (result) { 16 | application.invalidateData(); 17 | } 18 | } 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Tests/Commands/Serialization/ErrorMessageSerializerTests.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Tests.Commands.Serialization 2 | { 3 | using Application.Commands.Serialization; 4 | using CrystalQuartz.Core.Domain.Base; 5 | 6 | using NUnit.Framework; 7 | 8 | [TestFixture] 9 | public class ErrorMessageSerializerTests : SerializerTestsBase 10 | { 11 | [Test] 12 | public void Serialize_WithMessageAndLevel() 13 | { 14 | dynamic result = SerializeAndParse(new ErrorMessage("error text", 3)); 15 | 16 | Assert.That((string) result["_"], Is.EqualTo("error text")); 17 | Assert.That((int) result["l"], Is.EqualTo(3)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/ResumeGroupCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class ResumeGroupCommand : AbstractOperationCommand 8 | { 9 | public ResumeGroupCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(GroupInput input) 14 | { 15 | await SchedulerHost.Commander.ResumeJobGroup(input.Group); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Group, SchedulerEventType.Resumed, input.Group, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Owin/SchedulerEngineProviders.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Owin 2 | { 3 | using System; 4 | using System.Collections.Generic; 5 | using CrystalQuartz.Core.Contracts; 6 | using CrystalQuartz.Core.Quartz2; 7 | 8 | #if NET452_OR_GREATER || NETSTANDARD2_0_OR_GREATER 9 | using CrystalQuartz.Core.Quartz3; 10 | #endif 11 | 12 | public static class SchedulerEngineProviders 13 | { 14 | public static readonly IDictionary> SchedulerEngineResolvers = new Dictionary> 15 | { 16 | { 2, () => new Quartz2SchedulerEngine() }, 17 | #if NET452_OR_GREATER || NETSTANDARD2_0_OR_GREATER 18 | { 3, () => new Quartz3SchedulerEngine() }, 19 | #endif 20 | }; 21 | } 22 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/command-action.ts: -------------------------------------------------------------------------------- 1 | import { SchedulerData } from './api'; 2 | import { ApplicationModel } from './application-model'; 3 | import { ICommand } from './commands/contracts'; 4 | import Action from './global/actions/action'; 5 | import { CommandService } from './services'; 6 | 7 | export default class CommandAction extends Action { 8 | public constructor( 9 | application: ApplicationModel, 10 | commandService: CommandService, 11 | title: string, 12 | commandFactory: () => ICommand, 13 | confirmText?: string 14 | ) { 15 | super( 16 | title, 17 | () => 18 | commandService.executeCommand(commandFactory()).then((data) => application.setData(data)), 19 | confirmText 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application/Commands/ResumeJobCommand.cs: -------------------------------------------------------------------------------- 1 | namespace CrystalQuartz.Application.Commands 2 | { 3 | using System.Threading.Tasks; 4 | using CrystalQuartz.Core.Domain.Events; 5 | using Inputs; 6 | 7 | public class ResumeJobCommand : AbstractOperationCommand 8 | { 9 | public ResumeJobCommand(ISchedulerHostProvider schedulerHostProvider) : base(schedulerHostProvider) 10 | { 11 | } 12 | 13 | protected override async Task PerformOperation(JobInput input) 14 | { 15 | await SchedulerHost.Commander.ResumeJob(input.Job, input.Group); 16 | 17 | RiseEvent(new RawSchedulerEvent(SchedulerEventScope.Job, SchedulerEventType.Resumed, input.Group + "." + input.Job, null)); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /examples/08_Quartz3_SystemWeb_Remote/CqSamples.Quartz3.SystemWeb.RemoteServer/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/command-action.ts: -------------------------------------------------------------------------------- 1 | import Action from './global/actions/action'; 2 | import { CommandService } from './services'; 3 | import { ApplicationModel } from './application-model'; 4 | import { ICommand } from './commands/contracts'; 5 | import { SchedulerData } from './api'; 6 | 7 | export default class CommandAction extends Action { 8 | constructor( 9 | application: ApplicationModel, 10 | commandService: CommandService, 11 | title: string, 12 | commandFactory: () => ICommand, 13 | confirmText?: string) { 14 | 15 | super( 16 | title, 17 | () => commandService.executeCommand(commandFactory()).done(data => application.setData(data)), 18 | confirmText); 19 | } 20 | } -------------------------------------------------------------------------------- /examples/07_Quartz3_SystemWeb_Simple/CrystalQuartz.Samples.Quartz3.SystemWeb.Simple/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/main/main-content/job/job.tmpl.html: -------------------------------------------------------------------------------- 1 |
      2 |
      3 |
      4 | 8 | 9 |
      10 | 11 | 12 | 13 |
      14 |
      15 |
      16 |
      17 | 18 |
      19 | -------------------------------------------------------------------------------- /examples/09_Quartz3_AspNetCore_Web/CqSamples.Quartz3.AspNetCore.Simple/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore; 7 | using Microsoft.AspNetCore.Hosting; 8 | using Microsoft.Extensions.Configuration; 9 | using Microsoft.Extensions.Logging; 10 | 11 | namespace CqSamples.Quartz3.AspNetCore.Simple 12 | { 13 | public class Program 14 | { 15 | public static void Main(string[] args) 16 | { 17 | BuildWebHost(args).Run(); 18 | } 19 | 20 | public static IWebHost BuildWebHost(string[] args) => 21 | WebHost.CreateDefaultBuilder(args) 22 | .UseStartup() 23 | .Build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client/app/dialogs/common/errors-view.ts: -------------------------------------------------------------------------------- 1 | import { ErrorMessage } from '../../api'; 2 | 3 | export class ErrorsView implements js.IView { 4 | template = ` 5 |
      6 |
      Errors
      7 |
        8 |
        `; 9 | 10 | init(dom: js.IDom, errors: ErrorMessage[]) { 11 | dom('ul').observes(errors, ErrorMessageView); 12 | } 13 | } 14 | 15 | class ErrorMessageView implements js.IView { 16 | template = `
      • `; 17 | 18 | init(dom: js.IDom, errorMessage: ErrorMessage) { 19 | const $li = dom('li'); 20 | $li.observes(errorMessage.text); 21 | $li.$.css('padding-left', ((errorMessage.level + 1) * 15) + 'px'); 22 | } 23 | } -------------------------------------------------------------------------------- /src/CrystalQuartz.Application.Client2/src/dialogs/common/object-browser/index.scss: -------------------------------------------------------------------------------- 1 | @use "../../../global/constants" as c; 2 | 3 | .object-browser { 4 | table-layout: fixed; 5 | border-bottom: 1px solid #DDDDDD; 6 | width: 100%; 7 | 8 | .property-title, 9 | .property-value { 10 | width: 50%; 11 | font-size: 12px; 12 | padding-top: 3px; 13 | padding-bottom: 3px; 14 | overflow: hidden; 15 | text-overflow: ellipsis; 16 | } 17 | 18 | .property-title { 19 | background: #F8F8F8; 20 | border-right: 1px solid #DDDDDD; 21 | } 22 | 23 | .property-value { 24 | padding-left: 15px; 25 | padding-right: 15px; 26 | 27 | &.error { 28 | color: c.$error; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Demo.Quartz3.DotNetCore/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:61539/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "Demo.Quartz3.DotNetCore": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "environmentVariables": { 22 | "ASPNETCORE_ENVIRONMENT": "Development" 23 | }, 24 | "applicationUrl": "http://localhost:61540/" 25 | } 26 | } 27 | } 28 | --------------------------------------------------------------------------------