changeset 10:2231fd3f139b

Qtip added for LDB
author wobin
date Thu, 23 Apr 2009 04:11:42 +1000
parents c535960b1245
children 014f0ed0585a
files .pkgmeta Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua Squawk.lua Squawk.toc Tests.lua embeds.xml
diffstat 6 files changed, 193 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/.pkgmeta	Sun Apr 19 02:50:40 2009 +1000
+++ b/.pkgmeta	Thu Apr 23 04:11:42 2009 +1000
@@ -1,10 +1,24 @@
 package-as: Squawk
 
 externals:
-    Libs/LibStub: svn://svn.wowace.com/wow/ace3/mainline/trunk/LibStub
-    Libs/CallbackHandler-1.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/CallbackHandler-1.0
-    Libs/AceAddon-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0
-    Libs/AceConsole-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0
-    Libs/AceDB-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0
-    Libs/AceEvent-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0
-    Libs/AceLocale-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0
+    Libs/LibStub: 
+			url: svn://svn.wowace.com/wow/libstub/mainline/trunk
+			tag: latest
+    Libs/CallbackHandler-1.0: 
+			url: svn://svn.wowace.com/wow/ace3/mainline/trunk/CallbackHandler-1.0
+			tag: latest
+    Libs/AceAddon-3.0: 
+			url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0
+			tag: latest
+    Libs/AceConsole-3.0: 
+			url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0
+			tag: latest
+    Libs/AceDB-3.0: 
+			url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0
+			tag: latest
+    Libs/AceEvent-3.0: 
+			url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0
+			tag: latest
+		Libs/LibQTip-1.0:
+			url: svn://svn.wowace.com/wow/libqtip-1-0/mainline/trunk
+			tag: latest
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua	Thu Apr 23 04:11:42 2009 +1000
@@ -0,0 +1,90 @@
+
+assert(LibStub, "LibDataBroker-1.1 requires LibStub")
+assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0")
+
+local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4)
+if not lib then return end
+oldminor = oldminor or 0
+
+
+lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib)
+lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {}
+local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks
+
+if oldminor < 2 then
+	lib.domt = {
+		__metatable = "access denied",
+		__index = function(self, key) return attributestorage[self] and attributestorage[self][key] end,
+	}
+end
+
+if oldminor < 3 then
+	lib.domt.__newindex = function(self, key, value)
+		if not attributestorage[self] then attributestorage[self] = {} end
+		if attributestorage[self][key] == value then return end
+		attributestorage[self][key] = value
+		local name = namestorage[self]
+		if not name then return end
+		callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self)
+		callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self)
+		callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self)
+		callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self)
+	end
+end
+
+if oldminor < 2 then
+	function lib:NewDataObject(name, dataobj)
+		if self.proxystorage[name] then return end
+
+		if dataobj then
+			assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table")
+			self.attributestorage[dataobj] = {}
+			for i,v in pairs(dataobj) do
+				self.attributestorage[dataobj][i] = v
+				dataobj[i] = nil
+			end
+		end
+		dataobj = setmetatable(dataobj or {}, self.domt)
+		self.proxystorage[name], self.namestorage[dataobj] = dataobj, name
+		self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj)
+		return dataobj
+	end
+end
+
+if oldminor < 1 then
+	function lib:DataObjectIterator()
+		return pairs(self.proxystorage)
+	end
+
+	function lib:GetDataObjectByName(dataobjectname)
+		return self.proxystorage[dataobjectname]
+	end
+
+	function lib:GetNameByDataObject(dataobject)
+		return self.namestorage[dataobject]
+	end
+end
+
+if oldminor < 4 then
+	local next = pairs(attributestorage)
+	function lib:pairs(dataobject_or_name)
+		local t = type(dataobject_or_name)
+		assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)")
+
+		local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+		assert(attributestorage[dataobj], "Data object not found")
+
+		return next, attributestorage[dataobj], nil
+	end
+
+	local ipairs_iter = ipairs(attributestorage)
+	function lib:ipairs(dataobject_or_name)
+		local t = type(dataobject_or_name)
+		assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)")
+
+		local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name
+		assert(attributestorage[dataobj], "Data object not found")
+
+		return ipairs_iter, attributestorage[dataobj], 0
+	end
+end
--- a/Squawk.lua	Sun Apr 19 02:50:40 2009 +1000
+++ b/Squawk.lua	Thu Apr 23 04:11:42 2009 +1000
@@ -81,7 +81,7 @@
 	local o = {}
 	o.Owner = Owner or UnitName("player")
 	o.Message = Message
-	o.Time = os.time()
+	o.Time = time()
 	local reply, to = strsplit("@", ((strsplit(" ", Message))))
 	if reply == "" then
 		o.ReplyTo = to
@@ -116,6 +116,10 @@
 	return Settings.Private
 end
 
+function Settings:TogglePrivate()
+	Settings.Private = not Settings.Private
+end
+
 function Settings:AddFollower(Name)
 	Settings.Follower[Name] = 1
 	self:RemovePending(Name)
@@ -205,32 +209,36 @@
 end
 
 function Controller:AddANewSquawk(Name, Message, Source)
-	if not Model.Blocked[Name] then
+	if not Settings.Blocked[Name] then
 	
 		if Source == "WHISPER" then
-			if Model.Requested[Name] then -- We've been approved offline!
-				Model:AddFollowing(Name)
+			if Settings.Requested[Name] then -- We've been approved offline!
+				Settings:AddFollowing(Name)
 			end
 
-			if not Model.Following[Name] then -- If we're no longer following this person
+			if not Settings.Following[Name] then -- If we're no longer following this person
 				self:SendMessageToTarget(Name, "#Unfollow|"..UnitName("player"))
 				return
 			end
-	
-			table.insert(Model.Squawks, Squawk:new(Message, Name))
-			View:UpdateSquawkList()
+		end	
+		
+		if Source == "GUILD" and Name == UnitName("player") then
+			return
 		end
+
+		table.insert(Model.Squawks, Squawk:new(Message, Name))
+		View:UpdateSquawkList()	
 	end
 end
 
 function Controller:SendNewSquawk(Message)
-	if not Model:IsPrivate() then
+	if not Settings:IsPrivate() then
 		self:SendMessageToGuild("#Squawk|"..UnitName("player").."|"..Message)
 	end
 
 	self:AddANewSquawk(UnitName("player"), Message)
 	
-	for name, _ in pairs(Model.Following) do
+	for name, _ in pairs(Settings.Following) do
 		self:SendMessageToTarget(name, "#Squawk|"..UnitName("player").."|"..Message)
 	end
 end
@@ -243,8 +251,14 @@
 	View:NotifyOfPendingRequest(Name)
 end
 
+function Controller:ApprovePendingRequest(Name)
+	Settings:AddFollower(Name)
+	View:NotifyOfNewFollower(Name)
+	self:SendMessageToTarget(Name, "#Follow|"..UnitName("player"))
+end
+
 function Controller:SendMessageToTarget(Name, Message)
-	self:SendCommMessage("Squawk", Message, "WHISPER", Name, "BULK")
+	self:SendCommMessage("Squawk", Message, "WHISPER", Name)
 end
 
 function Controller:SendMessageToGuild(Message)
@@ -259,9 +273,10 @@
 		["#Request"] = Controller.TheyWantToFollowMe,
 	}
 
-function Controller:ReceiveMessage(Prefix, Message, Distribution, Sender)
+function Controller:ReceiveMessage(Message, Distribution, Sender)
 	local command, name, info = strsplit("|",Message)
-	Parse[command](self, name, info, Distribution)
+	View:Print(Distribution..":"..Message)
+	Parse[command](Controller, name, info, Distribution)
 end
 -- View --
 
@@ -316,3 +331,22 @@
 		self:Print(name)
 	end
 end
+
+local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"})
+local QTip = LibStub("LibQTip-1.0")
+
+function LDBFeed:OnEnter()
+	local tooltip = QTip:Acquire("Squawk",3, "LEFT", "LEFT", "RIGHT")
+	self.tooltip = tooltip
+	tooltip:AddHeader('Name')
+	tooltip:AddLine('testUser', 'Squawk!', '3 min ago')
+	tooltip:SmartAnchorTo(self)
+	tooltip:Show()
+end
+
+function LDBFeed:OnTooltipShow()
+end
+
+function LDBFeed:OnLeave()
+	QTip:Release(self.tooltip)
+end
--- a/Squawk.toc	Sun Apr 19 02:50:40 2009 +1000
+++ b/Squawk.toc	Thu Apr 23 04:11:42 2009 +1000
@@ -1,4 +1,4 @@
-## Interface: 30000
+## Interface: 30100
 ## Title: Squawk
 ## Author: Wobin
 ## Notes: In no way related to a Twitter client... *shifty look*
--- a/Tests.lua	Sun Apr 19 02:50:40 2009 +1000
+++ b/Tests.lua	Thu Apr 23 04:11:42 2009 +1000
@@ -16,38 +16,44 @@
 --]]
 --
 
-SquawkTester = LibStub("AceAddon-3.0", "AceComm-3.0", "AceConsole-3.0")
+SquawkTester = LibStub("AceAddon-3.0"):NewAddon("SquawkTester", "AceComm-3.0", "AceConsole-3.0")
 
 local Test = SquawkTester
+local Controller = Squawk.Controller
+local Settings = Squawk.Model.UserSettings
 
 function Test:OnInitialize()
-	self:RegisterComm("Squawk", ReceiveMessage)
-	self:RegisterSlashCommand("TestSquawk", "RunTests")
+	self:RegisterComm("Squawk", "ReceiveMessage")
+	self:RegisterChatCommand("TS", "RunTests")
+	self:Print("Initialising Tester")
+
+	self.Tests = { ["a"] = SquawkTester.AddPublicFollower,
+								["b"] = SquawkTester.RemovePublicFollower,
+								["c"] = SquawkTester.AddPrivateFollower,
+								["d"] = SquawkTester.ApprovePendingRequest
+							}
 end
-
-function Test:RunTests()
-	AddPublicFollower()
-	RemovePublicFollower()
-	AddPrivateFollower()
-	ApprovePendingRequest()
+function Test:RunTests(TestNumber)
+	self:Print(TestNumber)
+	self.Tests[TestNumber](Test)
 end
 
 function Test:AddPublicFollower()
-	Squawk.Settings.Private = false
-	Squawk.Controller:IWantToFollowThem(UnitName("player"))
+	Settings:TogglePrivate()
+	Controller:IWantToFollowThem(UnitName("player"))
 end
 
 function Test:RemovePublicFollower()
-	Squawk.Controller:IWantToUnfollowThem(UnitName("player"))
+	Controller:IWantToUnfollowThem(UnitName("player"))
 end
 
 function Test:AddPrivateFollower()
-	Squawk.Settings.Private = true
-	Squawk.Controller:IWantToFollowThem(UnitName("player"))
+	Settings:TogglePrivate()
+	Controller:IWantToFollowThem(UnitName("player"))
 end
 
 function Test:ApprovePendingRequest()
-	Squawk.Controller:ApprovePendingRequest(Name)
+	Controller:ApprovePendingRequest(UnitName("player"))
 end
 
 function Test:ReceiveMessage(Prefix, Message, Distribution, Sender)
--- a/embeds.xml	Sun Apr 19 02:50:40 2009 +1000
+++ b/embeds.xml	Thu Apr 23 04:11:42 2009 +1000
@@ -1,11 +1,13 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
-..\FrameXML\UI.xsd">
-	<Script file="Libs\Ace3\LibStub\LibStub.lua"/>
-	<Include file="Libs\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.xml"/>
-	<Include file="Libs\Ace3\AceTimer-3.0\AceTimer-3.0.xml"/>
-	<Include file="Libs\Ace3\AceEvent-3.0\AceEvent-3.0.xml"/>
-	<Include file="Libs\Ace3\AceLocale-3.0\AceLocale-3.0.xml"/>
-	<Include file="Libs\Ace3\AceConsole-3.0\AceConsole-3.0.xml"/>
-	<Include file="Libs\Ace3\AceDB-3.0\AceDB-3.0.xml"/>
-	<Include file="Libs\Ace3\AceAddon-3.0\AceAddon-3.0.xml"/>
-</Ui>
+<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
+..\FrameXML\UI.xsd">
+	<Script file="Libs\Ace3\LibStub\LibStub.lua"/>
+	<Script file="Libs\LibDataBroker-1.1\LibDataBroker-1.1.lua"/>
+	<Include file="Libs\LibQTip-1.0\lib.xml"/>
+	<Include file="Libs\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.xml"/>
+	<Include file="Libs\Ace3\AceTimer-3.0\AceTimer-3.0.xml"/>
+	<Include file="Libs\Ace3\AceEvent-3.0\AceEvent-3.0.xml"/>
+	<Include file="Libs\Ace3\AceLocale-3.0\AceLocale-3.0.xml"/>
+	<Include file="Libs\Ace3\AceConsole-3.0\AceConsole-3.0.xml"/>
+	<Include file="Libs\Ace3\AceDB-3.0\AceDB-3.0.xml"/>
+	<Include file="Libs\Ace3\AceAddon-3.0\AceAddon-3.0.xml"/>
+</Ui>