You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
851 lines
30 KiB
851 lines
30 KiB
---------------------------------------------------------------------------------
|
|
--
|
|
-- Prat - A framework for World of Warcraft chat mods
|
|
--
|
|
-- Copyright (C) 2006-2020 Prat Development Team
|
|
--
|
|
-- This program is free software; you can redistribute it and/or
|
|
-- modify it under the terms of the GNU General Public License
|
|
-- as published by the Free Software Foundation; either version 2
|
|
-- of the License, or (at your option) any later version.
|
|
--
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program; if not, write to:
|
|
--
|
|
-- Free Software Foundation, Inc.,
|
|
-- 51 Franklin Street, Fifth Floor,
|
|
-- Boston, MA 02110-1301, USA.
|
|
--
|
|
--
|
|
-------------------------------------------------------------------------------
|
|
|
|
Prat:AddModuleToLoad(function()
|
|
local function dbg(...) end
|
|
|
|
--[==[@debug@
|
|
-- function dbg(...) Prat:PrintLiteral(...) end
|
|
|
|
--@end-debug@]==]
|
|
|
|
local PRAT_MODULE = Prat:RequestModuleName("Memory")
|
|
|
|
if PRAT_MODULE == nil then
|
|
return
|
|
end
|
|
|
|
local module = Prat:NewModule(PRAT_MODULE, "AceHook-3.0", "AceEvent-3.0", "AceTimer-3.0")
|
|
|
|
-- define localized strings
|
|
local PL = module.PL
|
|
|
|
|
|
Prat:SetModuleDefaults(module.name, {
|
|
profile = {
|
|
on = true,
|
|
frames = { ["*"] = {} },
|
|
types = {},
|
|
cvars = {},
|
|
autoload = false
|
|
}
|
|
})
|
|
|
|
--[==[@debug@
|
|
PL:AddLocale(PRAT_MODULE, "enUS", {
|
|
["module_name"] = "Memory",
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
module_info = "|cffff8888THIS MODULE IS EXPERIMENTAL|r \n\n This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters",
|
|
autoload_name = "Load Settings Automatically",
|
|
autoload_desc = "Automatically load the saved settings when you log in",
|
|
load_name = "Load Settings",
|
|
load_desc = "Load the chat frame/tabs from the last save",
|
|
save_name = "Save Settings",
|
|
save_desc = "Save the current chat frame/tab configuration",
|
|
msg_nosettings = "No stored settings",
|
|
msg_settingsloaded = "Settings Loaded",
|
|
command_header_name = "Commands",
|
|
options_header_name = "Options",
|
|
msg_loadfailed = "Could not fully restore the chat settings"
|
|
})
|
|
--@end-debug@]==]
|
|
|
|
-- These Localizations are auto-generated. To help with localization
|
|
-- please go to http://www.wowace.com/projects/prat-3-0/localization/
|
|
|
|
|
|
--@non-debug@
|
|
do
|
|
local L
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
["autoload_desc"] = "Automatically load the saved settings when you log in",
|
|
["autoload_name"] = "Load Settings Automatically",
|
|
["command_header_name"] = "Commands",
|
|
["load_desc"] = "Load the chat frame/tabs from the last save",
|
|
["load_name"] = "Load Settings",
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
["module_info"] = [=[|cffff8888THIS MODULE IS EXPERIMENTAL|r
|
|
|
|
This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters]=],
|
|
["module_name"] = "Memory",
|
|
["msg_loadfailed"] = "Could not fully restore the chat settings",
|
|
["msg_nosettings"] = "No stored settings",
|
|
["msg_settingsloaded"] = "Settings Loaded",
|
|
["options_header_name"] = "Options",
|
|
["save_desc"] = "Save the current chat frame/tab configuration",
|
|
["save_name"] = "Save Settings",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "enUS", L)
|
|
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
--[[Translation missing --]]
|
|
["autoload_desc"] = "Automatically load the saved settings when you log in",
|
|
--[[Translation missing --]]
|
|
["autoload_name"] = "Load Settings Automatically",
|
|
--[[Translation missing --]]
|
|
["command_header_name"] = "Commands",
|
|
--[[Translation missing --]]
|
|
["load_desc"] = "Load the chat frame/tabs from the last save",
|
|
--[[Translation missing --]]
|
|
["load_name"] = "Load Settings",
|
|
--[[Translation missing --]]
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
--[[Translation missing --]]
|
|
["module_info"] = [=[|cffff8888THIS MODULE IS EXPERIMENTAL|r
|
|
|
|
This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters]=],
|
|
--[[Translation missing --]]
|
|
["module_name"] = "Memory",
|
|
--[[Translation missing --]]
|
|
["msg_loadfailed"] = "Could not fully restore the chat settings",
|
|
--[[Translation missing --]]
|
|
["msg_nosettings"] = "No stored settings",
|
|
--[[Translation missing --]]
|
|
["msg_settingsloaded"] = "Settings Loaded",
|
|
--[[Translation missing --]]
|
|
["options_header_name"] = "Options",
|
|
--[[Translation missing --]]
|
|
["save_desc"] = "Save the current chat frame/tab configuration",
|
|
--[[Translation missing --]]
|
|
["save_name"] = "Save Settings",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "itIT", L)
|
|
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
--[[Translation missing --]]
|
|
["autoload_desc"] = "Automatically load the saved settings when you log in",
|
|
--[[Translation missing --]]
|
|
["autoload_name"] = "Load Settings Automatically",
|
|
--[[Translation missing --]]
|
|
["command_header_name"] = "Commands",
|
|
--[[Translation missing --]]
|
|
["load_desc"] = "Load the chat frame/tabs from the last save",
|
|
--[[Translation missing --]]
|
|
["load_name"] = "Load Settings",
|
|
--[[Translation missing --]]
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
--[[Translation missing --]]
|
|
["module_info"] = [=[|cffff8888THIS MODULE IS EXPERIMENTAL|r
|
|
|
|
This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters]=],
|
|
--[[Translation missing --]]
|
|
["module_name"] = "Memory",
|
|
--[[Translation missing --]]
|
|
["msg_loadfailed"] = "Could not fully restore the chat settings",
|
|
--[[Translation missing --]]
|
|
["msg_nosettings"] = "No stored settings",
|
|
--[[Translation missing --]]
|
|
["msg_settingsloaded"] = "Settings Loaded",
|
|
--[[Translation missing --]]
|
|
["options_header_name"] = "Options",
|
|
--[[Translation missing --]]
|
|
["save_desc"] = "Save the current chat frame/tab configuration",
|
|
--[[Translation missing --]]
|
|
["save_name"] = "Save Settings",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "ptBR", L)
|
|
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
--[[Translation missing --]]
|
|
["autoload_desc"] = "Automatically load the saved settings when you log in",
|
|
--[[Translation missing --]]
|
|
["autoload_name"] = "Load Settings Automatically",
|
|
--[[Translation missing --]]
|
|
["command_header_name"] = "Commands",
|
|
--[[Translation missing --]]
|
|
["load_desc"] = "Load the chat frame/tabs from the last save",
|
|
--[[Translation missing --]]
|
|
["load_name"] = "Load Settings",
|
|
--[[Translation missing --]]
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
--[[Translation missing --]]
|
|
["module_info"] = [=[|cffff8888THIS MODULE IS EXPERIMENTAL|r
|
|
|
|
This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters]=],
|
|
--[[Translation missing --]]
|
|
["module_name"] = "Memory",
|
|
--[[Translation missing --]]
|
|
["msg_loadfailed"] = "Could not fully restore the chat settings",
|
|
--[[Translation missing --]]
|
|
["msg_nosettings"] = "No stored settings",
|
|
--[[Translation missing --]]
|
|
["msg_settingsloaded"] = "Settings Loaded",
|
|
--[[Translation missing --]]
|
|
["options_header_name"] = "Options",
|
|
--[[Translation missing --]]
|
|
["save_desc"] = "Save the current chat frame/tab configuration",
|
|
--[[Translation missing --]]
|
|
["save_name"] = "Save Settings",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "frFR", L)
|
|
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
["autoload_desc"] = "Ladet die gespeicherten Einstellungen automatisch, wenn du dich anmeldest",
|
|
["autoload_name"] = "Einstellungen automatisch laden",
|
|
["command_header_name"] = "Befehle",
|
|
["load_desc"] = "Ladet den Chat-Rahmen/Registerkarten aus der letzten Speicherung",
|
|
["load_name"] = "Einstellungen laden",
|
|
["module_desc"] = "Unterstützt das Speichern der Blizzard-Chat Einstellungen in deinem Profil, damit sie für alle deine Charaktere synchronisiert werden können",
|
|
["module_info"] = "|cffff8888DIESES MODUL IST EXPERIMENTELL|r Mit diesem Modul kannst du alle deine Chat-Einstellungen und deine Rahmenanordnung laden/speichern. Diese Einstellungen können auf jeden deiner Charaktere geladen werden",
|
|
["module_name"] = "Erinnerung",
|
|
["msg_loadfailed"] = "Die Chat-Einstellungen konnten nicht vollständig wiederhergestellt werden",
|
|
["msg_nosettings"] = "Keine gespeicherten Einstellungen",
|
|
["msg_settingsloaded"] = "Einstellungen geladen",
|
|
["options_header_name"] = "Optionen",
|
|
["save_desc"] = "Speichert die aktuelle Konfiguration des Chat-Rahmens/Registerkarte",
|
|
["save_name"] = "Einstellungen speichern",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "deDE", L)
|
|
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
["autoload_desc"] = "로그인시 저장된 설정을 자동으로 불러옵니다.",
|
|
["autoload_name"] = "자동 설정 불러오기",
|
|
["command_header_name"] = "명령어",
|
|
["load_desc"] = "마지막 저장에서 대화창/탭을 불러옴",
|
|
["load_name"] = "불러오기 설정",
|
|
["module_desc"] = "블리자드 채팅 설정을 프로필에 저장하여 모든 캐릭터와 동기화 할 수 있도록 지원",
|
|
["module_info"] = "|cffff8888이 모듈은 실험적입니다.|r 이 모듈을 사용하면 모든 채팅 설정 및 프레임 모양을 불러오기/저장할 수 있습니다. 이 설정은 모든 캐릭터에서 불러오기 할 수 있습니다.",
|
|
["module_name"] = "메모리 [Memory]",
|
|
["msg_loadfailed"] = "대화 설정을 완전히 복구하지 못했습니다",
|
|
["msg_nosettings"] = "저장된 설정 없음",
|
|
["msg_settingsloaded"] = "설정 불러옴",
|
|
["options_header_name"] = "옵션",
|
|
["save_desc"] = "정확한 대화창/탭 구성을 저장",
|
|
["save_name"] = "저장 설정",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "koKR", L)
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
--[[Translation missing --]]
|
|
["autoload_desc"] = "Automatically load the saved settings when you log in",
|
|
--[[Translation missing --]]
|
|
["autoload_name"] = "Load Settings Automatically",
|
|
--[[Translation missing --]]
|
|
["command_header_name"] = "Commands",
|
|
--[[Translation missing --]]
|
|
["load_desc"] = "Load the chat frame/tabs from the last save",
|
|
--[[Translation missing --]]
|
|
["load_name"] = "Load Settings",
|
|
--[[Translation missing --]]
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
--[[Translation missing --]]
|
|
["module_info"] = [=[|cffff8888THIS MODULE IS EXPERIMENTAL|r
|
|
|
|
This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters]=],
|
|
--[[Translation missing --]]
|
|
["module_name"] = "Memory",
|
|
--[[Translation missing --]]
|
|
["msg_loadfailed"] = "Could not fully restore the chat settings",
|
|
--[[Translation missing --]]
|
|
["msg_nosettings"] = "No stored settings",
|
|
--[[Translation missing --]]
|
|
["msg_settingsloaded"] = "Settings Loaded",
|
|
--[[Translation missing --]]
|
|
["options_header_name"] = "Options",
|
|
--[[Translation missing --]]
|
|
["save_desc"] = "Save the current chat frame/tab configuration",
|
|
--[[Translation missing --]]
|
|
["save_name"] = "Save Settings",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "esMX", L)
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
["autoload_desc"] = "Автоматически загружать сохраненные настройки при входе в систему",
|
|
["autoload_name"] = "Загружать настройки автоматически",
|
|
["command_header_name"] = "Команды ",
|
|
["load_desc"] = "Загрузить фрейм/вкладки чата из последнего сохранения",
|
|
["load_name"] = "Загрузить настройки",
|
|
["module_desc"] = "Поддержите сохранение настроек чата Blizzard в вашем профиле, чтобы их можно было синхронизировать со всеми вашими персонажами.",
|
|
["module_info"] = "|cffff8888 ЭТОТ МОДУЛЬ ЯВЛЯЕТСЯ ЭКСПЕРИМЕНТАЛЬНЫМ|r Этот модуль позволяет загружать/сохранять все настройки чата и разметки. Эти настройки можно загрузить на любого из ваших персонажей.",
|
|
["module_name"] = "Память",
|
|
["msg_loadfailed"] = "Не удалось полностью восстановить настройки чата",
|
|
["msg_nosettings"] = "Нет сохраненных настроек",
|
|
["msg_settingsloaded"] = "Настройки загружены",
|
|
["options_header_name"] = "Параметры ",
|
|
["save_desc"] = "Сохраните текущую конфигурацию фрейма/вкладки чата",
|
|
["save_name"] = "Сохранить настройки",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "ruRU", L)
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
["autoload_desc"] = "登录时自动加载保存过的设置",
|
|
["autoload_name"] = "自动加载设置",
|
|
["command_header_name"] = "命令",
|
|
["load_desc"] = "加载上次保存的聊天框/标签",
|
|
["load_name"] = "加载设置",
|
|
["module_desc"] = "支持将官方聊天设置保存到你的个人设置中,以便你可以在所有角色之间进行同步。",
|
|
["module_info"] = [=[|cffff8888此模块是实验性的|r
|
|
该模块允许你加载/保存所有的聊天设置和框体布局。这些设置可以导入到你的其他账号内]=],
|
|
["module_name"] = "内存",
|
|
["msg_loadfailed"] = "无法完全恢复聊天设置",
|
|
["msg_nosettings"] = "没有保存的设置",
|
|
["msg_settingsloaded"] = "设置已加载",
|
|
["options_header_name"] = "选项",
|
|
["save_desc"] = "保存当前的聊天框/标签设置",
|
|
["save_name"] = "保存设置",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "zhCN", L)
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
--[[Translation missing --]]
|
|
["autoload_desc"] = "Automatically load the saved settings when you log in",
|
|
--[[Translation missing --]]
|
|
["autoload_name"] = "Load Settings Automatically",
|
|
--[[Translation missing --]]
|
|
["command_header_name"] = "Commands",
|
|
--[[Translation missing --]]
|
|
["load_desc"] = "Load the chat frame/tabs from the last save",
|
|
--[[Translation missing --]]
|
|
["load_name"] = "Load Settings",
|
|
--[[Translation missing --]]
|
|
["module_desc"] = "Support saving the Blizzard chat settings to your profile so they can be synced across all your characters",
|
|
--[[Translation missing --]]
|
|
["module_info"] = [=[|cffff8888THIS MODULE IS EXPERIMENTAL|r
|
|
|
|
This module allows you to load/save all your chat settings and frame layout. These settings can be loaded on any of your characters]=],
|
|
--[[Translation missing --]]
|
|
["module_name"] = "Memory",
|
|
--[[Translation missing --]]
|
|
["msg_loadfailed"] = "Could not fully restore the chat settings",
|
|
--[[Translation missing --]]
|
|
["msg_nosettings"] = "No stored settings",
|
|
--[[Translation missing --]]
|
|
["msg_settingsloaded"] = "Settings Loaded",
|
|
--[[Translation missing --]]
|
|
["options_header_name"] = "Options",
|
|
--[[Translation missing --]]
|
|
["save_desc"] = "Save the current chat frame/tab configuration",
|
|
--[[Translation missing --]]
|
|
["save_name"] = "Save Settings",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "esES", L)
|
|
|
|
|
|
L = {
|
|
["Memory"] = {
|
|
["autoload_desc"] = "登录时自动加载保存过的设置",
|
|
["autoload_name"] = "自动加载设置",
|
|
["command_header_name"] = "命令",
|
|
["load_desc"] = "加载上次保存的聊天框/标签",
|
|
["load_name"] = "加载设置",
|
|
["module_desc"] = "支持将官方聊天设置保存到你的个人设置中,以便你可以在所有角色之间进行同步。",
|
|
["module_info"] = [=[|cffff8888此模块是实验性的|r
|
|
该模块允许你加载/保存所有的聊天设置和框体布局。这些设置可以导入到你的其他账号内]=],
|
|
["module_name"] = "内存",
|
|
["msg_loadfailed"] = "无法完全恢复聊天设置",
|
|
["msg_nosettings"] = "没有保存的设置",
|
|
["msg_settingsloaded"] = "设置已加载",
|
|
["options_header_name"] = "选项",
|
|
["save_desc"] = "保存当前的聊天框/标签设置",
|
|
["save_name"] = "保存设置",
|
|
}
|
|
}
|
|
|
|
PL:AddLocale(PRAT_MODULE, "zhTW", L)
|
|
end
|
|
--@end-non-debug@
|
|
|
|
local toggleOption = {
|
|
name = function(info) return info.handler.PL[info[#info] .. "_name"] end,
|
|
desc = function(info) return info.handler.PL[info[#info] .. "_desc"] end,
|
|
type = "toggle",
|
|
}
|
|
|
|
Prat:SetModuleOptions(module.name, {
|
|
name = PL.module_name,
|
|
desc = PL.module_desc,
|
|
type = "group",
|
|
args = {
|
|
info = {
|
|
name = PL.module_info,
|
|
type = "description",
|
|
},
|
|
command_header = {
|
|
name = PL.command_header_name,
|
|
type = "header",
|
|
order = 190,
|
|
},
|
|
save = {
|
|
name = PL.save_name,
|
|
desc = PL.save_desc,
|
|
type = "execute",
|
|
order = 191,
|
|
func = "SaveSettings"
|
|
},
|
|
load = {
|
|
name = PL.load_name,
|
|
desc = PL.load_desc,
|
|
type = "execute",
|
|
order = 190,
|
|
func = "LoadSettings"
|
|
},
|
|
options_header = {
|
|
name = PL.options_header_name,
|
|
type = "header",
|
|
order = 195,
|
|
},
|
|
autoload = {
|
|
name = PL.autoload_name,
|
|
desc = PL.autoload_desc,
|
|
type = "toggle",
|
|
order = 200,
|
|
}
|
|
}
|
|
})
|
|
|
|
local cvars = {
|
|
whisperMode = "CVar",
|
|
chatStyle = "CVar",
|
|
wholeChatWindowClickable = "CVarBool",
|
|
whisperMode = "CVar",
|
|
blockChannelInvites = "CVarBool"
|
|
}
|
|
|
|
Prat:SetModuleInit(module.name,
|
|
function(self)
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
end)
|
|
|
|
function module:PLAYER_ENTERING_WORLD()
|
|
self:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
|
self.ready = true
|
|
if self.needsLoading then
|
|
self:ScheduleTimer("LoadSettings", 0)
|
|
end
|
|
end
|
|
|
|
function module:OnModuleEnable()
|
|
if not self.working and self.db.profile.autoload and next(self.db.profile.frames) then
|
|
if not self.ready then
|
|
self.needsLoading = true
|
|
else
|
|
self:ScheduleTimer("LoadSettings", 0)
|
|
end
|
|
end
|
|
|
|
Prat.RegisterChatEvent(self, Prat.Events.PRE_ADDMESSAGE)
|
|
end
|
|
|
|
function module:SaveSettings()
|
|
local db = self.db.profile
|
|
|
|
wipe(db.frames)
|
|
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
self:SaveSettingsForFrame(i)
|
|
end
|
|
|
|
db.types = CopyTable(getmetatable(ChatTypeInfo).__index)
|
|
db.channels = { GetChannelList() }
|
|
|
|
for k,v in pairs(cvars) do
|
|
db.cvars[k] = _G["Get"..v](k)
|
|
end
|
|
|
|
self:Output("Settings Saved")
|
|
end
|
|
|
|
function module:SaveSettingsForFrame(frameId)
|
|
local db = self.db.profile.frames[frameId]
|
|
|
|
local name, fontSize, r, g, b, alpha, shown, locked, docked, uninteractable = GetChatWindowInfo(frameId)
|
|
db.name, db.fontSize, db.r, db.g, db.b, db.alpha, db.shown, db.locked, db.docked, db.uninteractable =
|
|
name, fontSize, r, g, b, alpha, shown, locked, docked, uninteractable
|
|
|
|
local f = Chat_GetChatFrame(frameId)
|
|
db.minimized = f.minimized
|
|
if f.minFrame then
|
|
db.minframe = {}
|
|
for i=1,f.minFrame:GetNumPoints() do
|
|
local point, relativeTo, relativePoint, xoff, yoff = f.minFrame:GetPoint(i)
|
|
db.minframe[#db.minframe+1] = { point, (type(relativeTo) == "table") and relativeTo:GetName() or relativeTo, relativePoint, xoff, yoff }
|
|
end
|
|
end
|
|
db.messages = { GetChatWindowMessages(frameId) }
|
|
db.channels = { GetChatWindowChannels(frameId) }
|
|
|
|
local width, height = GetChatWindowSavedDimensions(frameId);
|
|
local point, xOffset, yOffset = GetChatWindowSavedPosition(frameId)
|
|
|
|
db.point, db.xOffset, db.yOffset, db.width, db.height =
|
|
point, xOffset, yOffset, width, height
|
|
end
|
|
|
|
-- Warning: This function causes taint with DF edit mode
|
|
function module:LoadFrameSettingsForFrame(frameId)
|
|
local db = self.db.profile.frames[frameId]
|
|
local success = true
|
|
local f = Chat_GetChatFrame(frameId)
|
|
|
|
if not db.shown and not db.docked then
|
|
FCF_Close(f)
|
|
return success
|
|
end
|
|
|
|
if f.minimized then
|
|
FCF_MaximizeFrame(f)
|
|
end
|
|
|
|
-- Restore FloatingChatFrame
|
|
SetChatWindowName(frameId, db.name)
|
|
SetChatWindowSize(frameId, db.fontSize)
|
|
SetChatWindowColor(frameId, db.r, db.g, db.b)
|
|
SetChatWindowAlpha(frameId, db.alpha)
|
|
SetChatWindowDocked(frameId, db.docked)
|
|
SetChatWindowLocked(frameId, db.locked)
|
|
SetChatWindowUninteractable(frameId, db.uninteractable)
|
|
SetChatWindowSavedDimensions(frameId, db.width, db.height)
|
|
if db.point then
|
|
SetChatWindowSavedPosition(frameId, db.point, db.xOffset, db.yOffset)
|
|
end
|
|
SetChatWindowShown(frameId, db.shown)
|
|
FloatingChatFrame_Update(frameId, 1)
|
|
FCF_DockUpdate()
|
|
ChatEdit_DeactivateChat(f.editBox)
|
|
FCF_FadeInChatFrame(f)
|
|
|
|
if db.minimized then
|
|
FCF_MinimizeFrame(f, "LEFT")
|
|
f.minFrame:ClearAllPoints()
|
|
for i,v in ipairs(db.minframe) do
|
|
local point, relativeTo, relativePoint, xoff, yoff = unpack(v)
|
|
f.minFrame:SetPoint(point, relativeTo and _G[relativeTo], relativePoint, xoff, yoff)
|
|
end
|
|
|
|
f.minFrame:SetUserPlaced(true)
|
|
end
|
|
return success
|
|
end
|
|
|
|
function module:LoadChatSettingsForFrame(frameId)
|
|
local db = self.db.profile.frames[frameId]
|
|
local success = true
|
|
local f = Chat_GetChatFrame(frameId)
|
|
|
|
-- Restore ChatFrame
|
|
ChatFrame_RemoveAllMessageGroups(f)
|
|
for _, v in ipairs(db.messages) do
|
|
ChatFrame_AddMessageGroup(f, v);
|
|
end
|
|
|
|
ChatFrame_RemoveAllChannels(f)
|
|
for i = 1, #db.channels, 2 do
|
|
local chan = ChatFrame_AddChannel(f, db.channels[i])
|
|
if not chan then
|
|
dbg("failed to load", db.channels[i], chan)
|
|
success = false
|
|
end
|
|
end
|
|
|
|
ChatFrame_ReceiveAllPrivateMessages(f)
|
|
return success
|
|
end
|
|
function module:LeaveChannels(...)
|
|
local db = self.db.profile
|
|
local map = self:GetChannelMap(unpack(db.channels))
|
|
for i = 1, select("#", ...), 3 do
|
|
local snum, sname = select(i, ...);
|
|
local num, name = map[sname], map[snum];
|
|
if snum ~= num or sname ~= name then
|
|
dbg("leave", snum, sname, num, name)
|
|
LeaveChannelByName(snum)
|
|
end
|
|
end
|
|
end
|
|
|
|
local channelStepDelay = 0.5
|
|
local function getDelay()
|
|
return channelStepDelay + module.errorcount
|
|
end
|
|
|
|
function module:LeavePlaceholderChannels(...)
|
|
dbg("leave placeholders", ...)
|
|
for i = 1, select("#", ...), 3 do
|
|
local num, name = select(i, ...);
|
|
if name:match("^LeaveMe") then
|
|
dbg("leave", num, name)
|
|
LeaveChannelByName(num)
|
|
end
|
|
end
|
|
|
|
self:ScheduleTimer(function() module:CheckChannels(GetChannelList()) end, getDelay())
|
|
end
|
|
|
|
function module:GetChannelMap(...)
|
|
local map = {}
|
|
for i = 1, select("#", ...), 3 do
|
|
local num, name = select(i, ...);
|
|
map[name] = num
|
|
map[num] = name
|
|
end
|
|
|
|
return map
|
|
end
|
|
|
|
function module:CheckChannels(...)
|
|
dbg("check channels", ...)
|
|
local db = self.db.profile
|
|
local map = self:GetChannelMap(unpack(db.channels))
|
|
|
|
local correct = true
|
|
if select("#", ...) ~= #db.channels then
|
|
correct = "wrong"
|
|
else
|
|
for i = 1, select("#", ...), 3 do
|
|
local snum, sname = select(i, ...);
|
|
local num, name = db.channels[i], db.channels[i + 1];
|
|
if snum ~= num or sname ~= name then
|
|
dbg("mismatch", snum, num, sname, name, map[sname])
|
|
correct = map[sname] and "order" or "wrong"
|
|
end
|
|
end
|
|
end
|
|
|
|
dbg("channels correct", correct)
|
|
if type(correct) == "boolean" or self.errorcount >= 3 then
|
|
self:ScheduleTimer("LoadSettings", 0)
|
|
else
|
|
if correct == "wrong" then
|
|
self:LeaveChannels(GetChannelList())
|
|
self:ScheduleTimer("RestoreChannels", getDelay(), unpack(db.channels))
|
|
self.errorcount = self.errorcount + 1
|
|
elseif correct == "order" then
|
|
dbg(GetChannelList())
|
|
for i = 1, select("#", ...), 3 do
|
|
local snum, sname = select(i, GetChannelList());
|
|
local curnum = map[sname]
|
|
dbg("check", snum, curnum)
|
|
-- we check if the channel is joined and was joined in the past before
|
|
-- doing anything (avoids nil reference error on some new characters)
|
|
if curnum ~= nil and snum ~= nil and snum ~= curnum then
|
|
dbg("swap", snum, curnum)
|
|
if Prat.IsClassic then
|
|
SwapChatChannelByLocalID(snum, curnum)
|
|
else
|
|
C_ChatInfo.SwapChatChannelsByChannelIndex(snum, curnum)
|
|
end
|
|
end
|
|
end
|
|
|
|
self:ScheduleTimer(function() module:CheckChannels(GetChannelList()) end, getDelay())
|
|
end
|
|
end
|
|
end
|
|
|
|
if Prat.IsClassic then
|
|
function module:RestoreChannels(...)
|
|
local index = 1
|
|
for i = 1, select("#", ...), 3 do
|
|
local num, name = select(i, ...);
|
|
dbg("restore", name, num)
|
|
while index < num do
|
|
if GetChannelName(index) == 0 then
|
|
JoinTemporaryChannel("LeaveMe" .. index)
|
|
dbg("join", "LeaveMe" .. index)
|
|
end
|
|
index = index + 1
|
|
end
|
|
if GetChannelName(index) == 0 then
|
|
dbg("join", name)
|
|
JoinChannelByName(name)
|
|
else
|
|
dbg("occupied", name, select(2, GetChannelName(index)))
|
|
end
|
|
index = index + 1
|
|
end
|
|
|
|
self:ScheduleTimer(function() module:LeavePlaceholderChannels(GetChannelList()) end, getDelay())
|
|
end
|
|
else
|
|
function module:RestoreChannels(...)
|
|
local index = 1
|
|
for i = 1, select("#", ...), 3 do
|
|
local num, name = select(i, ...);
|
|
dbg("restore", name, num)
|
|
while index < num do
|
|
if GetChannelName(index) == 0 then
|
|
JoinTemporaryChannel("LeaveMe" .. index)
|
|
dbg("join", "LeaveMe" .. index)
|
|
else
|
|
dbg("skip", index)
|
|
end
|
|
index = index + 1
|
|
end
|
|
if GetChannelName(index) == 0 then
|
|
local clubId, streamId = ChatFrame_GetCommunityAndStreamFromChannel(name);
|
|
if not clubId or not streamId then
|
|
dbg("join", name)
|
|
|
|
JoinChannelByName(name)
|
|
else
|
|
dbg("addclub", clubId, streamId)
|
|
ChatFrame_AddNewCommunitiesChannel(1, clubId, streamId)
|
|
end
|
|
else
|
|
dbg("occupied", name, select(2, GetChannelName(index)))
|
|
end
|
|
index = index + 1
|
|
end
|
|
self:ScheduleTimer(function() module:LeavePlaceholderChannels(GetChannelList()) end, getDelay())
|
|
end
|
|
end
|
|
function module:LoadSettings()
|
|
local db = self.db.profile
|
|
local success = true
|
|
|
|
if not next(db.frames) then
|
|
self:Output(PL.msg_nosettings)
|
|
self.needsLoading = nil
|
|
return
|
|
end
|
|
|
|
if not self.working then
|
|
self.working = {}
|
|
end
|
|
|
|
-- restore CVars
|
|
if not self.working.cvars then
|
|
for k, v in pairs(cvars) do
|
|
local val = db.cvars[k]
|
|
if val ~= nil then
|
|
dbg("set cvar", k, val)
|
|
SetCVar(k, val)
|
|
end
|
|
end
|
|
self.working.cvars = true
|
|
end
|
|
|
|
-- Disabled for retail because it causes taint errors with edit mode
|
|
if Prat.IsClassic then
|
|
-- restore frame appearance and layout
|
|
if not self.working.frames then
|
|
for k, v in pairs(db.frames) do
|
|
if not self:LoadFrameSettingsForFrame(k) then
|
|
success = false
|
|
end
|
|
end
|
|
FCFDock_SelectWindow(GENERAL_CHAT_DOCK, ChatFrame1)
|
|
self.working.frames = success
|
|
end
|
|
end
|
|
|
|
-- restore chat channels
|
|
if not self.working.channels and db.channels and #db.channels > 0 then
|
|
self.errorcount = 0
|
|
self:ScheduleTimer("CheckChannels", getDelay(), GetChannelList())
|
|
self.working.channels = true
|
|
return
|
|
end
|
|
|
|
-- restore channels and messages to chatframes
|
|
if not self.working.chatframes then
|
|
for k, v in pairs(db.frames) do
|
|
if not self:LoadChatSettingsForFrame(k) then
|
|
success = false
|
|
end
|
|
end
|
|
self.working.chatframes = success
|
|
end
|
|
|
|
-- restore chat colors
|
|
if not self.working.colorsa then
|
|
for k, v in pairs(db.types) do
|
|
ChangeChatColor(k, v.r, v.g, v.b)
|
|
end
|
|
self.working.colorsa = true
|
|
end
|
|
|
|
if success then
|
|
self.needsLoading = nil
|
|
self.working = nil
|
|
self.errorcount = nil
|
|
self:Output(PL.msg_settingsloaded)
|
|
else
|
|
self.errorcount = self.errorcount + 1
|
|
|
|
if self.errorcount > 10 then
|
|
self.working = nil
|
|
self.errorcount = nil
|
|
self:Output(PL.msg_loadfailed)
|
|
return
|
|
end
|
|
self:ScheduleTimer("LoadSettings", getDelay())
|
|
end
|
|
end
|
|
|
|
function module:Prat_PreAddMessage(arg, message, frame, event, t, r, g, b)
|
|
if self.working and ("YOU_CHANGED" == message.NOTICE or "YOU_LEFT" == message.NOTICE) then
|
|
message.DONOTPROCESS = true
|
|
end
|
|
end
|
|
end)
|
|
|
|
|