Merge pull request #11 from SuperChamp234/CronImplementation

Cron implementation
This commit is contained in:
Zain 2021-11-16 18:32:34 +05:30 committed by GitHub
commit f1915876ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 75 additions and 9 deletions

View file

@ -1,17 +1,30 @@
import * as React from "react"; import * as React from "react";
import { Notice } from "obsidian"; import { Notice } from "obsidian";
import { getStats, scoreTask } from "./habiticaAPI" import { getStats, scoreTask, makeCronReq } from "./habiticaAPI"
import Statsview from "./Components/Statsview" import Statsview from "./Components/Statsview"
import Taskview from "./Components/Taskview" import Taskview from "./Components/Taskview"
class App extends React.Component<any,any> { class App extends React.Component<any,any> {
username = "" private _username = "";
credentials = "" public get username() {
return this._username;
}
public set username(value) {
this._username = value;
}
private _credentials = "";
public get credentials() {
return this._credentials;
}
public set credentials(value) {
this._credentials = value;
}
constructor(props: any) { constructor(props: any) {
super(props) super(props)
this.username = this.props.plugin.settings.userID this.username = this.props.plugin.settings.userID
this.credentials = this.props.plugin.settings.apiToken this.credentials = this.props.plugin.settings.apiToken
this.state = { this.state = {
needCron: false,
isLoaded: false, isLoaded: false,
user_data: { user_data: {
profile: { profile: {
@ -20,18 +33,48 @@ class App extends React.Component<any,any> {
stats: { stats: {
hp: 0, hp: 0,
lvl: 0, lvl: 0,
} },
lastCron: "",
}, },
todos: [], todos: [],
dailys: [], dailys: [],
habits: [], habits: [],
} }
this.handleChangeTodos = this.handleChangeTodos.bind(this) this.handleChangeTodos = this.handleChangeTodos.bind(this);
this.handleChangeDailys = this.handleChangeDailys.bind(this) this.handleChangeDailys = this.handleChangeDailys.bind(this);
this.handleChangeHabits = this.handleChangeHabits.bind(this) this.handleChangeHabits = this.handleChangeHabits.bind(this);
this.runCron = this.runCron.bind(this);
} }
CheckCron(lastCron: string) {
let cronDate = new Date(lastCron);
let now = new Date();
if (cronDate.getDate() != now.getDate() || (cronDate.getMonth() != now.getMonth() || cronDate.getFullYear() != now.getFullYear())) {
return(
<div className="cron">
<div id="cronMessage"> Welcome back! Please check your tasks for the last day and hit continue to get your daily rewards. </div>
<button onClick={this.runCron}>Continue</button>
</div>
);
}
else {
console.log("Cron is up to date");
return null
};
}
async runCron() {
console.log("running cron");
try {
let response = await makeCronReq(this.username, this.credentials);
this.setState({
needCron: false,
})
} catch (error) {
console.log(error);
new Notice("There was an error running the cron. Please try again later.");
}
this.reloadData();
}
async reloadData() { async reloadData() {
try { try {
let response = await getStats(this.username, this.credentials); let response = await getStats(this.username, this.credentials);
@ -40,6 +83,7 @@ class App extends React.Component<any,any> {
new Notice('Login Failed, Please check credentials and try again!'); new Notice('Login Failed, Please check credentials and try again!');
} }
else { else {
console.log(result);
this.setState({ this.setState({
isLoaded: true, isLoaded: true,
user_data: result, user_data: result,
@ -115,6 +159,7 @@ class App extends React.Component<any,any> {
} }
render(){ render(){
let content = this.CheckCron(this.state.user_data.lastCron);
if(this.state.error) if(this.state.error)
return(<div className="loading">Loading....</div>) return(<div className="loading">Loading....</div>)
else if(!this.state.isLoaded) else if(!this.state.isLoaded)
@ -124,6 +169,7 @@ class App extends React.Component<any,any> {
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" /> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<Statsview user_data={this.state.user_data} /> <Statsview user_data={this.state.user_data} />
<Taskview data={this.state.tasks} handleChangeTodos={this.handleChangeTodos} handleChangeDailys={this.handleChangeDailys} handleChangeHabits={this.handleChangeHabits}/> <Taskview data={this.state.tasks} handleChangeTodos={this.handleChangeTodos} handleChangeDailys={this.handleChangeDailys} handleChangeHabits={this.handleChangeHabits}/>
{content}
</div> </div>
); );
} }

View file

@ -27,7 +27,7 @@ export async function scoreTask(username: string, credentials: string, taskID: s
}) })
return(response) return(response)
} }
export async function makeCronReq(username: string, credentials: string, taskID: string){ export async function makeCronReq(username: string, credentials: string){
const url = "https://habitica.com/api/v3/cron"; const url = "https://habitica.com/api/v3/cron";
const response = fetch(url, { const response = fetch(url, {
method: 'POST', method: 'POST',

View file

@ -159,3 +159,23 @@ ul li:not(.task-list-item)::before {
font-weight: bold; font-weight: bold;
text-shadow: 0 0 0.5em transparent; text-shadow: 0 0 0.5em transparent;
} }
body > div.app-container.is-left-sidedock-collapsed.is-right-sidedock-collapsed > div.horizontal-main-container > div > div.workspace-split.mod-horizontal.mod-right-split > div.workspace-tabs > div.workspace-leaf > div > div.view-content > div > div.cron > button {
margin: auto;
margin-bottom: 5px;
}
.cron {
display: inline-grid;
justify-content: center;
text-align: center;;
margin-top: 5px;
margin-left: 10%;
margin-right: 10%;
margin-bottom: 10px;
background-color: var(--background-secondary-alt);
border-radius: 10px;
}
#cronMessage {
margin: 20px;
margin-bottom: 10px;
color: var(--text-normal)
}