annotate Squawk.lua @ 0:2c267c596711

First import Skeleton functionality, working on internals before anything
author wobin
date Thu, 16 Apr 2009 17:26:19 +1000
parents
children 188273d0efad
rev   line source
wobin@0 1 -- A Twitter client of sorts for World of Warcraft
wobin@0 2 -- Author: Wobin
wobin@0 3 -- Email: wobster@gmail.com
wobin@0 4 --
wobin@0 5 Squawk = LibStub("AceAddon-3.0"):NewAddon("Squawk", "AceDB-3.0")
wobin@0 6
wobin@0 7 Squawk.Model = {}
wobin@0 8 Squawk.View = {}
wobin@0 9 Squawk.Controller = {}
wobin@0 10
wobin@0 11 local Model = Squawk.Model
wobin@0 12 local View = Squawk.View
wobin@0 13 local Controller = Squawk.Controller
wobin@0 14
wobin@0 15 Model.UserSettings = {}
wobin@0 16 local Settings = Model.UserSettings
wobin@0 17
wobin@0 18 local defaults = {
wobin@0 19 profile = {
wobin@0 20 Squawks = {},
wobin@0 21 Follower = {},
wobin@0 22 Following = {},
wobin@0 23 Blocked = {},
wobin@0 24 }
wobin@0 25 }
wobin@0 26
wobin@0 27 function Squawk:OnInitialize()
wobin@0 28 Model.db = LibStub("AceDB-3.0"):New("SquawkDB", defaults)
wobin@0 29 Settings.Follower = Model.db.profile.Follower
wobin@0 30 Settings.Following = Model.db.profile.Following
wobin@0 31 Settings.Blocked = Model.db.profile.Blocked
wobin@0 32 Settings.Private = Model.db.profile.Private
wobin@0 33
wobin@0 34 LibStub("AceComm-3.0"):Embed(Controller)
wobin@0 35 Controller:RegisterComm("Squawk", ReceiveMessage)
wobin@0 36 end
wobin@0 37
wobin@0 38 -- Model --
wobin@0 39 --[[
wobin@0 40 --Each Squawk will have the following information:
wobin@0 41 -- * Owner (Name)
wobin@0 42 -- * Time (Epoch)
wobin@0 43 -- * Message (140 characters)
wobin@0 44 -- * ReplyTo (Name)
wobin@0 45 -- * Related (Names)
wobin@0 46 --
wobin@0 47 -- Each User will have the following lists:
wobin@0 48 -- * Follower
wobin@0 49 -- * Following
wobin@0 50 -- * Blocked
wobin@0 51 -- * Privacy State
wobin@0 52 --]]
wobin@0 53 Model.Squawk = {}
wobin@0 54 local Squawk = Model.Squawk
wobin@0 55
wobin@0 56 function Squawk:new(Message, Owner)
wobin@0 57 local o = {}
wobin@0 58 o.Owner = Owner or UnitName("player")
wobin@0 59 o.Message = Message
wobin@0 60 o.Time = os.time()
wobin@0 61 local reply, to = strsplit("@", ((strsplit(" ", Message))))
wobin@0 62 if reply == "" then
wobin@0 63 o.ReplyTo = to
wobin@0 64 end
wobin@0 65
wobin@0 66 o.Related = {}
wobin@0 67
wobin@0 68 for word in string.gmatch(Message, "@(%a+)") do
wobin@0 69 if word ~= o.ReplyTo or "" then
wobin@0 70 table.insert(o.Related, word)
wobin@0 71 end
wobin@0 72 end
wobin@0 73
wobin@0 74 return o
wobin@0 75 end
wobin@0 76
wobin@0 77 function Squawk:Sort(Squawks)
wobin@0 78 return table.sort(Squawks, function(a,b) return a.Time < b.Time end)
wobin@0 79 end
wobin@0 80
wobin@0 81 function Settings:IsPrivate()
wobin@0 82 return Settings.Private
wobin@0 83 end
wobin@0 84
wobin@0 85 function Settings:AddFollower(Name)
wobin@0 86 table.insert(Settings.Follower, Name)
wobin@0 87 end
wobin@0 88
wobin@0 89 function Settings:AddFollowing(Name)
wobin@0 90 table.insert(Settings.Following, Name)
wobin@0 91 end
wobin@0 92
wobin@0 93 function Settings:AddBlock(Name)
wobin@0 94 table.insert(Settings.Blocked, Name)
wobin@0 95 end
wobin@0 96
wobin@0 97 function Settings:RemoveFollower(Name)
wobin@0 98 for i,v in ipairs(Settings.Follower) do
wobin@0 99 if v == Name then
wobin@0 100 table.remove(Settings.Follower, i)
wobin@0 101 return
wobin@0 102 end
wobin@0 103 end
wobin@0 104 end
wobin@0 105
wobin@0 106 function Settings:RemoveFollowing(Name)
wobin@0 107 for i,v in ipairs(Settings.Following) do
wobin@0 108 if v == Name then
wobin@0 109 table.remove(Settings.Following, i)
wobin@0 110 return
wobin@0 111 end
wobin@0 112 end
wobin@0 113 end
wobin@0 114
wobin@0 115 function Settings:RemoveBlock(Name)
wobin@0 116 for i,v in ipairs(Settings.Blocked) do
wobin@0 117 if v == Name then
wobin@0 118 table.remove(Settings.Blocked, i)
wobin@0 119 return
wobin@0 120 end
wobin@0 121 end
wobin@0 122 end
wobin@0 123
wobin@0 124 --Controller--
wobin@0 125
wobin@0 126 function Controller:TheyWantToFollowMe(Name)
wobin@0 127 if Settings:IsPrivate() then
wobin@0 128 self:PutForwardFollowRequest(Name)
wobin@0 129 self:SendMessageToTarget(Name, "#Pending|"..UnitName("player"))
wobin@0 130 else
wobin@0 131 Settings:AddFollower(Name)
wobin@0 132 View:NotifyOfNewFollower(Name)
wobin@0 133 self:SendMessageToTarget(Name, "#Follow|"..UnitName("player"))
wobin@0 134 end
wobin@0 135 end
wobin@0 136
wobin@0 137 function Controller:IWantToFollowThem(Name)
wobin@0 138
wobin@0 139 end
wobin@0 140
wobin@0 141 function Controller:IAmNowFollowingThem(Name)
wobin@0 142 Settings:AddFollowing(Name)
wobin@0 143 View:NotifyOfNewFollowing(Name)
wobin@0 144 end
wobin@0 145
wobin@0 146 function Controller:AddANewSquawk(Name, Message)
wobin@0 147 table.insert(Model.db.Squawks, Squawk:new(Message, Name))
wobin@0 148 View:UpdateSquawkList()
wobin@0 149 end
wobin@0 150
wobin@0 151 function Controller:SendMessageToTarget(Name, Message)
wobin@0 152 self:SendCommMessage("Squawk", Message, "WHISPER", Name, "BULK")
wobin@0 153 end
wobin@0 154
wobin@0 155 function Controller:SendMessageToGuild(Message)
wobin@0 156 self:SendCommMessage("Squawk", Message, "GUILD")
wobin@0 157 end
wobin@0 158
wobin@0 159 local Parse = {
wobin@0 160 ["#Pending"] = View:NotifyOfPending,
wobin@0 161 ["#Follow"] = Controller:IAmNowFollowingThem,
wobin@0 162 ["#Squawk"] = Controller:AddANewSquawk
wobin@0 163 }
wobin@0 164
wobin@0 165 function Controller:ReceiveMessage(Prefix, Message, Distribution, Sender)
wobin@0 166 local command, name, info = strsplit("|",Message)
wobin@0 167 Parse[command](name, info)
wobin@0 168 end
wobin@0 169 -- View --
wobin@0 170
wobin@0 171 function View:UpdateSquawkList()
wobin@0 172 end
wobin@0 173
wobin@0 174 function View:NotifyOfPending()
wobin@0 175 end
wobin@0 176
wobin@0 177 function View:NotifyOfNewFollowing(Name)
wobin@0 178 end
wobin@0 179
wobin@0 180 function View:NotifyOfNewFollower(Name)
wobin@0 181 end