ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FreeBSDAdmin/IRC/smart_ison.cpp
(Generate patch)

Comparing FreeBSDAdmin/IRC/smart_ison.cpp (file contents):
Revision 1263 by douglas, 2010-03-21T06:30:15-07:00 vs.
Revision 1265 by douglas, 2010-03-21T18:05:14-07:00

# Line 44 | Line 44 | public:
44          MODCONSTRUCTOR(SmartISON) {}
45          virtual ~SmartISON() {}
46  
47 +        virtual EModRet OnCTCPReply(CNick &nick, CString &message)
48 +        {
49 +                nicks_[nick.GetNick()] = true;
50 +
51 +                return CONTINUE;
52 +        }
53 +
54 +        virtual void OnKick(const CNick &nick, const CString &opNick, CChan &chan, const CString &message)
55 +        {
56 +                queue_.push_front(nick.GetNick());
57 +        }
58 +
59          virtual bool OnLoad(const CString &args, CString &message)
60          {
61                  return AddTimer(new SmartISONTimer(this));
# Line 65 | Line 77 | public:
77                          table.AddRow();
78                          table.SetCell("Command", "Queue");
79                          table.SetCell("Description", "List the nick status queue");
80 +                        table.AddRow();
81 +                        table.SetCell("Command", "Version");
82 +                        table.SetCell("Description", "Display module version");
83  
84                          PutModule(table);
85                  }
# Line 106 | Line 121 | public:
121  
122                                  PutModule(table);
123                          }
124 +                else if (theCommand.Equals("Version"))
125 +                        PutModule("$Id$");
126                  else
127                          PutModule("Unknown command [" + theCommand + "] try 'Help'");
128          }
129  
130 +        virtual void OnModCTCP(const CString &message)
131 +        {
132 +                CString command(message.Token(0));
133 +
134 +                if (command.Equals("PING"))
135 +                        PutModNotice("\001PING " + message.Token(1, true) + "\001");
136 +                else if (command.Equals("Version"))
137 +                        PutModNotice("\001VERSION $Id$\001");
138 +        }
139 +
140          virtual void OnNick(const CNick &nick, const CString &newNick, const std::vector<CChan *> &chans)
141          {
142                  const CString &oldNick(nick.GetNick());
# Line 118 | Line 145 | public:
145                  nicks_[newNick] = true;
146          }
147  
148 +        virtual void OnPart(const CNick &nick, CChan &chan)
149 +        {
150 +                queue_.push_front(nick.GetNick());
151 +        }
152 +
153 +        virtual EModRet OnPrivAction(CNick &nick, CString &message)
154 +        {
155 +                nicks_[nick.GetNick()] = true;
156 +
157 +                return CONTINUE;
158 +        }
159 +
160 +        virtual EModRet OnPrivCTCP(CNick &nick, CString &message)
161 +        {
162 +                nicks_[nick.GetNick()] = true;
163 +
164 +                return CONTINUE;
165 +        }
166 +
167 +        virtual EModRet OnPrivMsg(CNick &nick, CString &message)
168 +        {
169 +                nicks_[nick.GetNick()] = true;
170 +
171 +                return CONTINUE;
172 +        }
173 +
174 +        virtual EModRet OnPrivNotice(CNick &nick, CString &message)
175 +        {
176 +                nicks_[nick.GetNick()] = true;
177 +
178 +                return CONTINUE;
179 +        }
180 +
181          virtual void OnQuit(const CNick &nick, const CString &message, const std::vector<CChan *> &chans)
182          {
183                  const CString &theNick(nick.GetNick());
# Line 155 | Line 215 | private:
215          {
216                  Type nicks;
217  
218 <                _foreach (const std::vector<CChan *>, channel, GetUser()->GetChans())
218 >                _foreach (const std::vector<CChan *>, chan, GetUser()->GetChans())
219                  {
220                          typedef std::map<CString, CNick *> NickMap;
221  
222 <                        _foreach (const NickMap, nick, (*channel)->GetNicks())
222 >                        _foreach (const NickMap, nick, (*chan)->GetNicks())
223                          {
224                                  nicks_[nick->first] = true;
225                                  nicks.insert(nick->first);
# Line 181 | Line 241 | void SmartISONTimer::RunJob()
241   {
242          SmartISON *module(static_cast<SmartISON *>(GetModule()));
243  
184        if (module->queue_.empty())
185        {
186                typedef std::map<CString, bool, SmartISON::Compare> NickMap;
187
188                _foreach (NickMap, nick, module->nicks_)
189                        module->queue_.push_back(nick->first);
190        }
191
244          module->request_.clear();
245  
246          std::set<CString, SmartISON::Compare> online(module->CheckChans<std::set<CString, SmartISON::Compare> >());
# Line 220 | Line 272 | void SmartISONTimer::RunJob()
272  
273                  module->PutIRC(request);
274          }
275 +
276 +        if (module->queue_.empty())
277 +        {
278 +                typedef std::map<CString, bool, SmartISON::Compare> NickMap;
279 +
280 +                _foreach (NickMap, nick, module->nicks_)
281 +                        module->queue_.push_back(nick->first);
282 +        }
283   }
284  
285   template <>
# Line 253 | Line 313 | CModule::EModRet SmartISON::OnUserRaw(CS
313                                  if (nick->Equals(prefix, false, prefix.size()))
314                                  {
315                                          CString modNick(nick->substr(prefix.size()));
316 +                                        CModule *module(NULL);
317  
318 <                                        if (modNick.Equals("status") || GetUser()->GetModules().FindModule(modNick) || CZNC::Get().GetModules().FindModule(modNick))
319 <                                                goto online;
318 >                                        if (modNick.Equals("status") || (module = GetUser()->GetModules().FindModule(modNick)) || (module = CZNC::Get().GetModules().FindModule(modNick)))
319 >                                        {
320 >                                                response += (module ? module->GetModNick() : prefix + "status") + " ";
321 >                                                continue;
322 >                                        }
323                                  }
324  
325 <                                if (!nicks_.count(*nick))
262 <                                        queue_.push_front(*nick);
325 >                                std::map<CString, bool, Compare>::iterator theNick(nicks_.find(*nick));
326  
327 <                                if (nicks_[*nick])
328 < online:                         response += *nick + " ";
327 >                                if (theNick == nicks_.end())
328 >                                {
329 >                                        nicks_[*nick] = false;
330 >
331 >                                        queue_.push_front(*nick);
332 >                                }
333 >                                else if (theNick->second)
334 >                                        response += theNick->first + " ";
335                          }
336  
337                          PutUser(response);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines