Improve resource scan
Walk only unique paths
This commit is contained in:
@ -1,10 +1,10 @@
|
||||
import { ActionController, registerAction } from './ActionController';
|
||||
import { grabVillageList } from '../Page/VillageBlock';
|
||||
import { grabHeroVillage } from '../Page/HeroPage';
|
||||
import { path } from '../utils';
|
||||
import { HeroStorage } from '../Storage/HeroStorage';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerAction
|
||||
export class GoToHeroVillageAction extends ActionController {
|
||||
|
@ -16,11 +16,11 @@ import { ResourcesToLevel } from './Task/ResourcesToLevel';
|
||||
import { ConsoleLogger, Logger } from './Logger';
|
||||
import { DataStorage } from './DataStorage';
|
||||
import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetectors';
|
||||
import { debounce } from 'debounce';
|
||||
import { ExecutionStorage } from './Storage/ExecutionStorage';
|
||||
import { createVillageStates, VillageState } from './VillageState';
|
||||
import { Task } from './Queue/TaskProvider';
|
||||
import { Action } from './Queue/ActionQueue';
|
||||
import * as _ from 'underscore';
|
||||
|
||||
interface QuickAction {
|
||||
label: string;
|
||||
@ -110,7 +110,7 @@ export class ControlPanel {
|
||||
}, 3000);
|
||||
|
||||
DataStorage.onChange(
|
||||
debounce(() => {
|
||||
_.debounce(() => {
|
||||
state.refresh();
|
||||
}, 500)
|
||||
);
|
||||
|
@ -197,10 +197,10 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { path } from '../utils';
|
||||
import ResourceBalance from './ResourceBalance';
|
||||
import VillageResource from './VillageResource';
|
||||
import { COLLECTION_POINT_ID, HORSE_STABLE_ID, MARKET_ID, QUARTERS_ID, WAREHOUSE_ID } from '../Core/Buildings';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
34
src/Helpers/Path.ts
Normal file
34
src/Helpers/Path.ts
Normal file
@ -0,0 +1,34 @@
|
||||
export interface PathQuery {
|
||||
[key: string]: string | number | undefined;
|
||||
}
|
||||
|
||||
export interface PathDefinition {
|
||||
name: string;
|
||||
query: PathQuery;
|
||||
}
|
||||
|
||||
export type PathList = Array<PathDefinition>;
|
||||
|
||||
export function path(base: string, query: PathQuery = {}): string {
|
||||
let parts: string[] = [];
|
||||
for (let name of Object.keys(query)) {
|
||||
if (query[name] !== undefined) {
|
||||
parts.push(`${name}=${query[name]}`);
|
||||
}
|
||||
}
|
||||
return base + (parts.length ? '?' + parts.join('&') : '');
|
||||
}
|
||||
|
||||
export function uniqPaths(paths: PathList): PathList {
|
||||
const keys: { [k: string]: boolean | undefined } = {};
|
||||
const result: PathList = [];
|
||||
for (let path of paths) {
|
||||
const pathKey = JSON.stringify(path);
|
||||
if (keys[pathKey]) {
|
||||
continue;
|
||||
}
|
||||
keys[pathKey] = true;
|
||||
result.push(path);
|
||||
}
|
||||
return result;
|
||||
}
|
@ -30,7 +30,7 @@ export function getBuildingPageAttributes(): BuildingPageAttributes {
|
||||
buildTypeId: getNumber(elClassId($buildEl.attr('class'), 'gid')),
|
||||
level: getNumber(elClassId($buildEl.attr('class'), 'level')),
|
||||
buildId: getNumber(p.query.id) || undefined,
|
||||
categoryId: getNumber(p.query.category, 1),
|
||||
categoryId: getNumber(p.query.category) || 1,
|
||||
sheetId: getNumber(p.query.s) || undefined,
|
||||
tabId: getNumber(p.query.t) || undefined,
|
||||
};
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { ActionDefinition } from './TaskController';
|
||||
import { grabVillageList } from '../Page/VillageBlock';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { path } from '../utils';
|
||||
import { MARKET_ID } from '../Core/Buildings';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
export function scanAllVillagesBundle(): Array<ActionDefinition> {
|
||||
const actions: Array<ActionDefinition> = [];
|
||||
|
@ -2,11 +2,11 @@ import { TaskController, registerTask } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { CompleteTaskAction } from '../Action/CompleteTaskAction';
|
||||
import { BalanceHeroResourcesAction } from '../Action/BalanceHeroResourcesAction';
|
||||
import { path } from '../utils';
|
||||
import { GoToHeroVillageAction } from '../Action/GoToHeroVillageAction';
|
||||
import { Action } from '../Queue/ActionQueue';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class BalanceHeroResourcesTask extends TaskController {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { BuildBuildingAction } from '../Action/BuildBuildingAction';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { path } from '../utils';
|
||||
import { TaskController, registerTask, ActionDefinition } from './TaskController';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class BuildBuildingTask extends TaskController {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { TaskController, registerTask, ActionDefinition } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { path } from '../utils';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { ForgeImprovementAction } from '../Action/ForgeImprovementAction';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class ForgeImprovementTask extends TaskController {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { TaskController, registerTask, ActionDefinition } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { path } from '../utils';
|
||||
import { UpgradeResourceToLevel } from '../Action/UpgradeResourceToLevel';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class ResourcesToLevel extends TaskController {
|
||||
|
@ -3,10 +3,10 @@ import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { CompleteTaskAction } from '../Action/CompleteTaskAction';
|
||||
import { SendOnAdventureAction } from '../Action/SendOnAdventureAction';
|
||||
import { ClickButtonAction } from '../Action/ClickButtonAction';
|
||||
import { path } from '../utils';
|
||||
import { Action } from '../Queue/ActionQueue';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class SendOnAdventureTask extends TaskController {
|
||||
|
@ -1,12 +1,12 @@
|
||||
import { TaskController, registerTask, ActionDefinition } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { CompleteTaskAction } from '../Action/CompleteTaskAction';
|
||||
import { path } from '../utils';
|
||||
import { SendResourcesAction } from '../Action/SendResourcesAction';
|
||||
import { ClickButtonAction } from '../Action/ClickButtonAction';
|
||||
import { scanAllVillagesBundle } from './ActionBundles';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class SendResourcesTask extends TaskController {
|
||||
|
@ -2,10 +2,10 @@ import { registerTask, TaskController } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { CompleteTaskAction } from '../Action/CompleteTaskAction';
|
||||
import { TrainTrooperAction } from '../Action/TrainTrooperAction';
|
||||
import { path } from '../utils';
|
||||
import { Action } from '../Queue/ActionQueue';
|
||||
import { Args } from '../Queue/Args';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class TrainTroopTask extends TaskController {
|
||||
|
@ -1,33 +1,36 @@
|
||||
import { TaskController, registerTask, ActionDefinition } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { path } from '../utils';
|
||||
import { UpgradeBuildingTask } from './UpgradeBuildingTask';
|
||||
import { ImmutableTaskList, Task } from '../Queue/TaskProvider';
|
||||
import { ForgeImprovementTask } from './ForgeImprovementTask';
|
||||
import { path, PathList, uniqPaths } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class UpdateResourceContracts extends TaskController {
|
||||
defineActions(task: Task): Array<ActionDefinition> {
|
||||
const tasks = this.scheduler.getTaskItems();
|
||||
|
||||
return [...this.walkUpgradeTasks(tasks), ...this.walkImprovementTask(tasks)];
|
||||
const paths = [...this.walkUpgradeTasks(tasks), ...this.walkImprovementTask(tasks)];
|
||||
const uniq = uniqPaths(paths);
|
||||
|
||||
return uniq.map(p => [GoToPageAction.name, { path: path(p.name, p.query) }]);
|
||||
}
|
||||
|
||||
private walkUpgradeTasks(tasks: ImmutableTaskList): Array<ActionDefinition> {
|
||||
private walkUpgradeTasks(tasks: ImmutableTaskList): PathList {
|
||||
return tasks
|
||||
.filter(t => t.name === UpgradeBuildingTask.name && t.args.villageId && t.args.buildId)
|
||||
.map(t => [
|
||||
GoToPageAction.name,
|
||||
{ path: path('/build.php', { newdid: t.args.villageId, id: t.args.buildId }) },
|
||||
]);
|
||||
.map(t => ({
|
||||
name: '/build.php',
|
||||
query: { newdid: t.args.villageId, id: t.args.buildId },
|
||||
}));
|
||||
}
|
||||
|
||||
private walkImprovementTask(tasks: ImmutableTaskList): Array<ActionDefinition> {
|
||||
private walkImprovementTask(tasks: ImmutableTaskList): PathList {
|
||||
return tasks
|
||||
.filter(t => t.name === ForgeImprovementTask.name && t.args.villageId && t.args.buildId)
|
||||
.map(t => [
|
||||
GoToPageAction.name,
|
||||
{ path: path('/build.php', { newdid: t.args.villageId, id: t.args.buildId }) },
|
||||
]);
|
||||
.map(t => ({
|
||||
name: '/build.php',
|
||||
query: { newdid: t.args.villageId, id: t.args.buildId },
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { UpgradeBuildingAction } from '../Action/UpgradeBuildingAction';
|
||||
import { TaskController, registerTask, ActionDefinition } from './TaskController';
|
||||
import { GoToPageAction } from '../Action/GoToPageAction';
|
||||
import { path } from '../utils';
|
||||
import { Task } from '../Queue/TaskProvider';
|
||||
import { path } from '../Helpers/Path';
|
||||
|
||||
@registerTask
|
||||
export class UpgradeBuildingTask extends TaskController {
|
||||
|
14
src/utils.ts
14
src/utils.ts
@ -92,25 +92,11 @@ export function parseLocation(location?: string | undefined) {
|
||||
return new URLParse(location || window.location.href, true);
|
||||
}
|
||||
|
||||
export function path(p: string, query: { [key: string]: string | number | undefined } = {}) {
|
||||
let parts: string[] = [];
|
||||
for (let k in query) {
|
||||
if (query[k] !== undefined) {
|
||||
parts.push(`${k}=${query[k]}`);
|
||||
}
|
||||
}
|
||||
return p + (parts.length ? '?' + parts.join('&') : '');
|
||||
}
|
||||
|
||||
export function notify(msg: string): void {
|
||||
const n = new Notification(msg);
|
||||
setTimeout(() => n && n.close(), 4000);
|
||||
}
|
||||
|
||||
export interface NowTimeGenerator {
|
||||
(): number;
|
||||
}
|
||||
|
||||
export function markPage(text: string, version: string) {
|
||||
jQuery('body').append(
|
||||
'<div style="' +
|
||||
|
Reference in New Issue
Block a user