From e4a335db1967093a381bf8a730a63a2172b6051d Mon Sep 17 00:00:00 2001 From: fkloft Date: Mon, 25 May 2015 16:15:15 +0200 Subject: [PATCH] [uniques] ask to mark mission waypoints as visited upon completion --- plugins/missions.user.js | 8 ++--- plugins/uniques.user.js | 76 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 74 insertions(+), 10 deletions(-) diff --git a/plugins/missions.user.js b/plugins/missions.user.js index c1737b41..473e3f6f 100644 --- a/plugins/missions.user.js +++ b/plugins/missions.user.js @@ -575,7 +575,7 @@ window.plugin.missions = { else this.checkedWaypoints[mwpid] = true; - window.runHooks('plugin-missions-waypoint-changed', { mwpid: mwpid, }); + window.runHooks('plugin-missions-waypoint-changed', { mwpid: mwpid, local: true, }); if (!dontsave) { this.checkedWaypointsUpdateQueue[mwpid] = true; this.storeLocal('checkedWaypoints'); @@ -606,7 +606,7 @@ window.plugin.missions = { else this.checkedMissions[mid] = true; - window.runHooks('plugin-missions-mission-changed', { mid: mid, }); + window.runHooks('plugin-missions-mission-changed', { mid: mid, local: true, }); this.checkedMissionsUpdateQueue[mid] = true; this.storeLocal('checkedMissions'); this.storeLocal('checkedMissionsUpdateQueue'); @@ -860,9 +860,9 @@ window.plugin.missions = { this.storeLocal(fieldName + 'UpdateQueue'); if(fieldName === 'checkedMissions') { - window.runHooks('plugin-missions-mission-changed', { mid: e.property, }); + window.runHooks('plugin-missions-mission-changed', { mid: e.property, local: false, }); } else if(fieldName === 'checkedWaypoints') { - window.runHooks('plugin-missions-waypoint-changed', { mwpid: e.property, }); + window.runHooks('plugin-missions-waypoint-changed', { mwpid: e.property, local: false, }); } } }, diff --git a/plugins/uniques.user.js b/plugins/uniques.user.js index f2c0d723..ed33718f 100644 --- a/plugins/uniques.user.js +++ b/plugins/uniques.user.js @@ -489,19 +489,83 @@ window.plugin.uniques.setupPortalsList = function() { }); } +window.plugin.uniques.onMissionChanged = function(data) { + if(!data.local) return; + + var mission = window.plugin.missions && window.plugin.missions.getMissionCache(data.mid, false); + if(!mission) return; + + window.plugin.uniques.checkMissionWaypoints(mission); +}; + +window.plugin.uniques.onMissionLoaded = function(data) { + // the mission has been loaded, but the dialog isn't visible yet. + // we'll wait a moment so the mission dialog is opened behind the confirmation prompt + setTimeout(function() { + window.plugin.uniques.checkMissionWaypoints(data.mission); + }, 0); +}; + +window.plugin.uniques.checkMissionWaypoints = function(mission) { + if(!(window.plugin.missions && window.plugin.missions.checkedMissions[mission.guid])) return; + + if(!mission.waypoints) return; + + function isValidWaypoint(wp) { + // might be hidden or field trip card + if(!(wp && wp.portal && wp.portal.guid)) return false; + + // only use hack, deploy, link, field and upgrade; ignore photo and passphrase + if(wp.objectiveNum <= 0 || wp.objectiveNum > 5) return false; + + return true; + } + function isVisited(wp) { + var guid = wp.portal.guid, + uniqueInfo = plugin.uniques.uniques[guid], + visited = (uniqueInfo && uniqueInfo.visited) || false; + + return visited; + } + + // check if all waypoints are already visited + if(mission.waypoints.every(function(wp) { + if(!isValidWaypoint(wp)) return true; + return isVisited(wp); + })) return; + + if(!confirm('The mission ' + mission.title + ' contains waypoints not yet marked as visited.\n\n' + + 'Do you want to set them to \'visited\' now?')) + return; + + mission.waypoints.forEach(function(wp) { + if(!isValidWaypoint(wp)) return; + if(isVisited(wp)) return; + + plugin.uniques.setPortalVisited(wp.portal.guid); + }); +}; + + var setup = function() { - if($.inArray('pluginUniquesUpdateUniques', window.VALID_HOOKS) < 0) - window.VALID_HOOKS.push('pluginUniquesUpdateUniques'); - if($.inArray('pluginUniquesRefreshAll', window.VALID_HOOKS) < 0) - window.VALID_HOOKS.push('pluginUniquesRefreshAll'); + window.pluginCreateHook('pluginUniquesUpdateUniques'); + window.pluginCreateHook('pluginUniquesRefreshAll'); + + // to mark mission portals as visited + window.pluginCreateHook('plugin-missions-mission-changed'); + window.pluginCreateHook('plugin-missions-loaded-mission'); + window.plugin.uniques.setupCSS(); window.plugin.uniques.setupContent(); window.plugin.uniques.loadLocal('uniques'); + window.addPortalHighlighter('Uniques', window.plugin.uniques.highlighter); window.addHook('portalDetailsUpdated', window.plugin.uniques.onPortalDetailsUpdated); window.addHook('publicChatDataAvailable', window.plugin.uniques.onPublicChatDataAvailable); window.addHook('iitcLoaded', window.plugin.uniques.registerFieldForSyncing); - window.addPortalHighlighter('Uniques', window.plugin.uniques.highlighter); - + + window.addHook('plugin-missions-mission-changed', window.plugin.uniques.onMissionChanged); + window.addHook('plugin-missions-loaded-mission', window.plugin.uniques.onMissionLoaded); + if(window.plugin.portalslist) { window.plugin.uniques.setupPortalsList(); } else {