summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/addons/addons/Lookup/Lookup.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/addons/addons/Lookup/Lookup.lua')
-rw-r--r--Data/BuiltIn/Libraries/addons/addons/Lookup/Lookup.lua248
1 files changed, 0 insertions, 248 deletions
diff --git a/Data/BuiltIn/Libraries/addons/addons/Lookup/Lookup.lua b/Data/BuiltIn/Libraries/addons/addons/Lookup/Lookup.lua
deleted file mode 100644
index 499f2a6..0000000
--- a/Data/BuiltIn/Libraries/addons/addons/Lookup/Lookup.lua
+++ /dev/null
@@ -1,248 +0,0 @@
---[[
- Copyright © 2018, Karuberu
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of Lookup nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-]]
-_addon.name = 'Lookup'
-_addon.author = 'Karuberu'
-_addon.version = '1.0'
-_addon.commands = {'lookup', 'lu'}
-
-config = require('config')
-res = require('resources')
-
-settings = nil
-ids = nil
-last_item = nil
-
-function load_settings()
- settings = config.load({
- default = 'ffxiclopedia';
- sites = {
- ffxiclopedia = {
- search = 'https://ffxiclopedia.fandom.com/wiki/Special:Search?query=${term}';
- };
- ['bg-wiki'] = {
- search = 'https://www.bg-wiki.com/bg/Special:Search?go=Go&search=${term}';
- };
- ffxidb = {
- item = 'http://www.ffxidb.com/items/${term}';
- zone = 'http://www.ffxidb.com/zones/${term}';
- search = 'http://www.ffxidb.com/search?q=${term}';
- };
- ffxiah = {
- item = 'http://www.ffxiah.com/item/${term}';
- search = 'http://www.ffxiah.com/search/item?q=${term}';
- };
- ffxiahplayer = {
- search = 'https://www.ffxiah.com/search/player?name=${term}';
- };
- google = {
- search = 'https://www.google.com/search?q=${term}';
- };
- ffxi = { redirect = 'ffxiclopedia'; };
- wikia = { redirect = 'ffxiclopedia'; };
- bgwiki = { redirect = 'bg-wiki'; };
- bg = { redirect = 'bg-wiki'; };
- db = { redirect = 'ffxidb'; };
- ah = { redirect = 'ffxiah'; };
- ffxiahp = { redirect = 'ffxiahplayer'; };
- ahp = { redirect = 'ffxiahplayer'; };
- };
- })
-end
-
--- Creates a list of item and zone ids by name for quicker lookup by name
-function initialize_ids()
- ids = {
- items = {};
- zones = {};
- }
- for item in res.items:it() do
- ids.items[item.name] = item.id
- ids.items[item.name_log] = item.id
- end
- for zone in res.zones:it() do
- ids.zones[zone.name] = zone.id
- end
-end
-
-function get_id(name)
- if id == nil then
- return {}
- end
- return {
- item = ids.items[name];
- zone = ids.zones[name];
- }
-end
-
-function get_name(id, list)
- if id == nil then
- return nil
- end
- return (list[id] or {}).name
-end
-
--- Converts auto-translate strings to plain text.
--- If the string is not an auto-translate string, the original string is returned.
-function translate(str)
- return windower.convert_auto_trans(str)
-end
-
--- Checks to see if the string is a selector (enclosed by <>) and returns a replacement.
--- If the string is not a selector, the original string is returned.
-function parse_selection(str)
- local target = str:match('<(.+)>')
- if target == nil then
- return str
- end
-
- -- custom selection handlers
- if target == 'job' or target == 'mjob' then
- return windower.ffxi.get_player().main_job_full
- elseif target == 'sjob' then
- return windower.ffxi.get_player().sub_job_full
- elseif target == 'zone' then
- if windower.ffxi.get_info().mog_house then
- return 'Mog House'
- else
- return get_name(windower.ffxi.get_info().zone, res.zones)
- end
- elseif target == 'item' then
- return get_name(last_item, res.items)
- end
- -- default to windower's selection handlers
- return (windower.ffxi.get_mob_by_target(str) or {}).name
-end
-
-function set_default_site(command_modifier, site)
- settings.default = site
- if command_modifier == 'player' or command_modifier == 'p' then
- -- save only for the current character
- settings:save()
- else
- -- save for all characters
- settings:save('all')
- end
-end
-
-function modify_site_settings(site, type, url)
- if url == 'remove' then
- url = nil
- end
- settings.sites[site][type] = url
-end
-
-function set_last_item(bag, index, id, count)
- if bag == 0 then
- last_item = id
- end
-end
-
--- Replaces the named parameters in the url
-function format_url(url, term)
- if term == nil then
- return term
- end
- return url:gsub('${term}', '%s':format(term))
-end
-
-function get_site(command)
- local site = settings.sites[command]
- if site ~= nil and site.redirect ~= nil then
- site = settings.sites[site.redirect]
- end
- return site
-end
-
-function get_url(site, term)
- term = translate(term)
- term = parse_selection(term)
- local id = get_id(term)
- if id.item ~= nil and site.item ~= nil then
- url = format_url(site.item, id.item)
- elseif id.zone ~= nil and site.zone ~= nil then
- url = format_url(site.zone, id.zone)
- else
- url = format_url(site.search, term)
- end
- return url
-end
-
-function process_command(...)
- -- get the first argument and set it as the command for now
- local command = ({...}[1] or ''):lower()
-
- if command == 'default' then
- local command_modifier, default_site
- if {...}[3] ~= nil then
- -- if there are three or more arguments, the second one is the modifier
- command_modifier = {...}[2]
- default_site = {...}[3]
- else
- default_site = {...}[2]
- end
- set_default_site(command_modifier, default_site)
- return
- elseif command == 'site' then
- local site = {...}[2]
- local type = {...}[3]
- local url = {...}[4]
- modify_site_settings(site, type, url)
- return
- end
-
- local term;
- if {...}[2] ~= nil then
- -- if there are two arguments, the first is the command and the second the term
- command = {...}[1]
- term = {...}[2]
- else
- -- otherwise, just a term is provided, so use the default command
- command = settings.default
- term = {...}[1]
- end
- if term == nil then
- return
- end
-
- local site = get_site(command:lower())
- if site == nil then
- return
- end
-
- local url = get_url(site, term)
- if url == nil then
- return
- end
- windower.open_url(url)
-end
-
-load_settings()
-initialize_ids()
-
-windower.register_event('add item', set_last_item)
-windower.register_event('addon command', process_command)