Merge branch 'master' into production
This commit is contained in:
commit
ff8ea6ae90
|
@ -7,6 +7,7 @@ import React, { useState, useEffect } from 'react';
|
||||||
import { useSelector, shallowEqual } from 'react-redux';
|
import { useSelector, shallowEqual } from 'react-redux';
|
||||||
import { t } from 'ttag';
|
import { t } from 'ttag';
|
||||||
|
|
||||||
|
import useInterval from './hooks/useInterval';
|
||||||
import { getToday, dateToString } from '../core/utils';
|
import { getToday, dateToString } from '../core/utils';
|
||||||
|
|
||||||
const keptState = {
|
const keptState = {
|
||||||
|
@ -277,6 +278,12 @@ function Modtools() {
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useInterval(() => {
|
||||||
|
if (userlvl > 0) {
|
||||||
|
getCleanerStats((stats) => setCleanerStats(stats));
|
||||||
|
}
|
||||||
|
}, 10000);
|
||||||
|
|
||||||
const cleanerStatusString = (!cleanerstats.running)
|
const cleanerStatusString = (!cleanerstats.running)
|
||||||
? t`Status: Not running`
|
? t`Status: Not running`
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
|
@ -625,6 +632,14 @@ function Modtools() {
|
||||||
tlccoords,
|
tlccoords,
|
||||||
brccoords,
|
brccoords,
|
||||||
(ret) => {
|
(ret) => {
|
||||||
|
setCleanerStats({
|
||||||
|
running: true,
|
||||||
|
percent: 'N/A',
|
||||||
|
method: cleanAction,
|
||||||
|
tl: tlccoords,
|
||||||
|
br: brccoords,
|
||||||
|
canvasId: selectedCanvas,
|
||||||
|
});
|
||||||
setSubmitting(false);
|
setSubmitting(false);
|
||||||
setResp(ret);
|
setResp(ret);
|
||||||
},
|
},
|
||||||
|
|
24
src/components/hooks/useInterval.js
Normal file
24
src/components/hooks/useInterval.js
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
import { useEffect, useRef } from 'react';
|
||||||
|
|
||||||
|
function useInterval(callback, delay) {
|
||||||
|
const savedCallback = useRef();
|
||||||
|
|
||||||
|
// Remember the latest callback.
|
||||||
|
useEffect(() => {
|
||||||
|
savedCallback.current = callback;
|
||||||
|
}, [callback]);
|
||||||
|
|
||||||
|
// Set up the interval.
|
||||||
|
// eslint-disable-next-line consistent-return
|
||||||
|
useEffect(() => {
|
||||||
|
function tick() {
|
||||||
|
savedCallback.current();
|
||||||
|
}
|
||||||
|
if (delay !== null) {
|
||||||
|
const id = setInterval(tick, delay);
|
||||||
|
return () => clearInterval(id);
|
||||||
|
}
|
||||||
|
}, [delay]);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default useInterval;
|
|
@ -28,24 +28,24 @@ const METHODS = {
|
||||||
* of chunk area
|
* of chunk area
|
||||||
*/
|
*/
|
||||||
spare: (xc, yc, clrIgnore, canvasCleaner) => {
|
spare: (xc, yc, clrIgnore, canvasCleaner) => {
|
||||||
|
let pxl = canvasCleaner.getPixelInChunkArea(xc, yc);
|
||||||
|
if (pxl === null || pxl < clrIgnore) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
let rplPxl = null;
|
let rplPxl = null;
|
||||||
for (let u = -1; u <= 1; u += 1) {
|
for (let u = -1; u <= 1; u += 1) {
|
||||||
for (let v = -1; v <= 1; v += 1) {
|
for (let v = -1; v <= 1; v += 1) {
|
||||||
const pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v);
|
pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v);
|
||||||
if (pxl === null) {
|
if (pxl === null
|
||||||
|
|| (u === 0 && v === 0)
|
||||||
|
) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (u === 0 && v === 0) {
|
if (pxl >= clrIgnore) {
|
||||||
if (pxl < clrIgnore) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
if (rplPxl === null) {
|
||||||
} else {
|
rplPxl = pxl;
|
||||||
if (pxl >= clrIgnore) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (rplPxl === null) {
|
|
||||||
rplPxl = pxl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,32 +53,33 @@ const METHODS = {
|
||||||
},
|
},
|
||||||
|
|
||||||
spareext: (xc, yc, clrIgnore, canvasCleaner) => {
|
spareext: (xc, yc, clrIgnore, canvasCleaner) => {
|
||||||
|
let pxl = canvasCleaner.getPixelInChunkArea(xc, yc);
|
||||||
|
if (pxl === null || pxl < clrIgnore) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
let rplPxl = null;
|
let rplPxl = null;
|
||||||
let origPxl = null;
|
const origPxl = pxl;
|
||||||
for (let u = -1; u <= 1; u += 1) {
|
for (let u = -1; u <= 1; u += 1) {
|
||||||
for (let v = -1; v <= 1; v += 1) {
|
for (let v = -1; v <= 1; v += 1) {
|
||||||
const pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v);
|
pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v);
|
||||||
if (pxl === null) {
|
if (pxl === null
|
||||||
|
|| (u === 0 && v === 0)
|
||||||
|
) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (u === 0 && v === 0) {
|
if (rplPxl === null) {
|
||||||
if (pxl < clrIgnore || pxl === rplPxl) {
|
rplPxl = pxl;
|
||||||
return null;
|
continue;
|
||||||
}
|
}
|
||||||
origPxl = pxl;
|
if (pxl < clrIgnore) {
|
||||||
} else {
|
continue;
|
||||||
if (rplPxl === null) {
|
}
|
||||||
rplPxl = pxl;
|
if (rplPxl < clrIgnore) {
|
||||||
}
|
rplPxl = pxl;
|
||||||
if (pxl >= clrIgnore) {
|
continue;
|
||||||
if (rplPxl < clrIgnore) {
|
}
|
||||||
rplPxl = pxl;
|
if (pxl !== rplPxl) {
|
||||||
continue;
|
return null;
|
||||||
}
|
|
||||||
if (pxl !== rplPxl) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user