Changeset 6247 for branches/newosd/src/iface.cpp
- Timestamp:
- 06/09/08 09:04:59 (7 months ago)
- Files:
-
- 1 modified
-
branches/newosd/src/iface.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/newosd/src/iface.cpp
r6220 r6247 71 71 72 72 case USER_EVENTS: 73 if (sig->Argument() < 0)74 {75 msg.clear();76 break;77 }78 79 73 if (sig->Argument() == 0) 80 74 { … … 83 77 } 84 78 79 control = false; 80 81 if (conf->notifyOnly) 85 82 { 86 control = false; 87 if (conf->notifyOnly) 83 msg = "Message from "; 84 msg += u->GetAlias(); 85 if (conf->markSecure && u->Secure()) 86 msg += " [secured]"; 87 msg += "."; 88 } 89 else 90 { 91 CUserEvent* ue = u->EventPeekId(sig->Argument()); 92 if (ue == NULL) 88 93 { 89 msg = "Message from "; 90 msg += u->GetAlias(); 91 if (conf->markSecure && u->Secure()) 92 msg += " [secured]"; 93 msg += "."; 94 msg.clear(); 95 break; 94 96 } 95 else 96 { 97 CUserEvent* ue = u->EventPeekId(sig->Argument()); 98 if (ue == NULL) 99 { 100 msg.clear(); 101 break; 102 } 103 if (conf->markSecure && u->Secure()) 104 msg += " (S)"; 105 msg += ": "; 106 char* trans = gTranslator.ToUnicode(const_cast<char*>(ue->Text()), 107 u->UserEncoding()); 108 msg += trans; 109 delete[] trans; 110 } 97 if (conf->markSecure && u->Secure()) 98 msg += " (S)"; 99 msg += ": "; 100 char* trans = gTranslator.ToUnicode(const_cast<char*>(ue->Text()), 101 u->UserEncoding()); 102 msg += trans; 103 delete[] trans; 111 104 } 112 105 break; 113 114 default:115 msg.clear();116 break;117 106 } 118 107 119 108 gUserManager.DropUser(u); 109 break; 120 110 } 121 break;122 111 123 112 case SIGNAL_LOGON: 124 113 case SIGNAL_LOGOFF: 125 114 ppidTimers[sig->PPID()] = time(NULL) + conf->quietTimeout; 126 break;127 128 default:129 115 break; 130 116 } … … 164 150 bool Iface::filterSignal(CICQSignal* sig) 165 151 { 166 if (!(sig->SubSignal() == USER_EVENTS && sig->Argument() > 0) && 167 ppidTimers[sig->PPID()] > time(NULL)) 168 return true; 152 switch (sig->SubSignal()) 153 { 154 case USER_STATUS: 155 case USER_EVENTS: 156 break; 157 158 default: 159 return true; 160 } 161 162 bool isMessage = (sig->SubSignal() == USER_EVENTS && sig->Argument() > 0); 163 164 if (!isMessage && (ppidTimers[sig->PPID()] > time(NULL))) 165 return true; 166 167 ICQOwner* o = gUserManager.FetchOwner(sig->PPID(), LOCK_R); 168 if (o == NULL) 169 return true; 170 171 bool isOwner = (strcmp(o->IdString(), sig->Id()) == 0); 172 unsigned short ourStatus = o->Status(); 173 174 gUserManager.DropOwner(sig->PPID()); 175 176 // TODO status check 177 178 if (isOwner) 179 { 180 if (isMessage && conf->showMessage != GROUP_TYPE_NONE) 181 return false; 182 183 return true; 184 } 169 185 170 186 ICQUser* u = gUserManager.FetchUser(sig->Id(), sig->PPID(), LOCK_R); … … 172 188 return true; 173 189 174 bool ret= u->IgnoreList();190 bool ign = u->IgnoreList(); 175 191 bool on = u->OnlineNotify(); 176 192 177 193 gUserManager.DropUser(u); 178 194 179 if ( ret)180 return true; 181 182 ICQOwner* o = gUserManager.FetchOwner(sig->PPID(), LOCK_R); 183 if (o == NULL)184 return true;195 if (ign) 196 return true; 197 198 #define GROUP_DISABLED(type) \ 199 (conf->type == GROUP_TYPE_NONE || \ 200 (conf->type == GROUP_TYPE_ONLINE_NOTIFY && !on)) 185 201 186 202 if (sig->SubSignal() == USER_STATUS) 187 203 { 188 if (sig->Argument() == 0) 189 { 190 if (conf->statusChange == GROUP_TYPE_NONE || 191 (conf->statusChange == GROUP_TYPE_ONLINE_NOTIFY && !on)) 192 ret = true; 193 } 194 else 195 if (conf->logonLogoff == GROUP_TYPE_NONE || 196 (conf->logonLogoff == GROUP_TYPE_ONLINE_NOTIFY && !on)) 197 ret = true; 204 if (sig->Argument() == 0 && GROUP_DISABLED(statusChange)) 205 return true; 206 207 if (GROUP_DISABLED(logonLogoff)) 208 return true; 198 209 } 199 210 … … 201 212 { 202 213 if (sig->Argument() < 0) 203 ret = true; 204 else 205 if (sig->Argument() == 0) 206 { 207 if (conf->autoResponse == GROUP_TYPE_NONE || 208 (conf->autoResponse == GROUP_TYPE_ONLINE_NOTIFY && !on)) 209 ret = true; 210 } 211 else 212 { 213 if (conf->showMessage == GROUP_TYPE_NONE || 214 (conf->showMessage == GROUP_TYPE_ONLINE_NOTIFY && !on && 215 strcmp(sig->Id(), o->IdString()) != 0)) 216 ret = true; 217 } 218 } 219 220 if (ret) 221 { 222 gUserManager.DropOwner(o->PPID()); 223 return true; 224 } 225 226 do 227 { 228 // TODO status check 229 230 // Don't let owner messages (e.g. auth-reqs) be filtered 231 if (sig->SubSignal() == USER_EVENTS && 232 sig->Argument() > 0) 233 break; 234 235 if (strcmp(sig->Id(), o->IdString()) == 0) 236 { 237 ret = true; 238 break; 239 } 240 } while (false); 241 242 gUserManager.DropOwner(o->PPID()); 243 244 return ret; 214 return true; 215 216 if (sig->Argument() == 0 && GROUP_DISABLED(autoResponse)) 217 return true; 218 219 if (GROUP_DISABLED(showMessage)) 220 return true; 221 } 222 #undef GROUP_DISABLED 223 224 return false; 245 225 } 246 226
