GroupService.pas 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. unit GroupService;
  2. interface
  3. uses
  4. StrUtils, SysUtils, Windows, superobject, Classes, GroupClient, RealICQModel,
  5. xFonts, Graphics, DownloadFileFromWeb, DateUtils;
  6. type
  7. TGroupService = class
  8. private
  9. FTeams: TStringList;
  10. FLoginName: string;
  11. FGroupClient: TGroupClient;
  12. FDownFile: TDownFile;
  13. function RemoveMembers(AMembers: string; ARemoveMembers: TStrings): string;
  14. function AddMembers(AMembers: string; ANewMembers: TStrings): string;
  15. procedure DownFaceFileComplete(Source_file, Dest_file: string; blStatus: boolean; ErrMessage: string);
  16. function AddMember(AMembers, ANewMember: string): string;
  17. public
  18. procedure Init(ALoginName: string);
  19. procedure Uninstall;
  20. class function GetService: TGroupService; static;
  21. constructor Create;
  22. destructor Destroy; override;
  23. { TODO -olqq -c : 群组请求 2015/6/8 11:09:05 }
  24. procedure QuitTeam(ATeamID: string);
  25. procedure DisbandTeam(ATeamID: string);
  26. procedure UpdateTeam(ATeamID, AIntro, ANotice, AName: string; AAuth: Integer);
  27. procedure CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro: string; ATeamMembers: TStringList; AIsTempTeam: Boolean; ATeamValidateType: TRealICQTeamValidateType);
  28. procedure SearchTeam(AKey: string; ASearchType: TRealICQTeamSearchType; AMatchingType: TRealICQMatchingType; APage: Integer);
  29. procedure AddTeamMembers(ATeamID: string; AAddMembers: TStringList);
  30. procedure RemoveTeamMembers(ATeamID: string; ARemoveMembers: TStringList);
  31. procedure UpdateTeamMembers(ATeamID: string; AOldMembers, ANewMembers: TStringList);
  32. function RemoveManager(ATeamID, ALoginName: string): Boolean;
  33. function AddManager(ATeamID, ALoginName: string): Boolean;
  34. procedure SetAlias(ATeamID, ALoginName, Alias: string);
  35. function GetAlias(ATeamID, ALoginName: string): string;
  36. procedure JoinTeam(ATeamID, ATag: string);
  37. procedure JoinTeamResponse(ATeamID, ALoginName, ATag: string; Accepted: Boolean);
  38. procedure SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: string);
  39. function IsTeamManager(ATeamID, ALoginName: string): Boolean;
  40. function GetTeam(ATeamID: string): TRealICQTeam;
  41. function GetTeams: TStringList;
  42. procedure MessageMiscMust(ATeamID: string);
  43. { TODO -olqq -c : 群组信息反馈 2015/6/8 11:08:43 }
  44. procedure OnMessageReaded(ATeamID: string; ts: Int64);
  45. procedure OnAddedTeam(ATeam: TRealICQTeam; ts: Int64 = 0);
  46. procedure OnDeletedTeam(ATeamID: string);
  47. procedure OnTeamInfoChange(ATeam: TRealICQTeam);
  48. procedure OnSearched(ARecords: TStringList; ASkip, ALimit: Integer); overload;
  49. procedure OnAddedMembers(ATeamID: string; AMembers: TStrings);
  50. procedure OnAddedManagers(ATeamID: string; AManagers: TStrings);
  51. procedure OnDeletedMembers(ATeamID: string; AMembers: TStrings);
  52. procedure OnDeletedManagers(ATeamID: string; AManagers: TStrings);
  53. procedure OnReceivedApplyBoardcast(ATeamID, ALoginName, ATag: string);
  54. procedure OnReceivedReplyBoardcast(ATeamID, ALoginName, ATag: string; ARet: Integer);
  55. procedure OnMessage(ATeamID, ASender, AContent, AStyle: string; ASendTime: TDateTime; AMSGType, ALength: Integer);
  56. procedure OnUploaded(ADownloadURL, AFileName: string);
  57. end;
  58. implementation
  59. uses
  60. MainFrm, SearchTeamFrm, RealICQUtils, ShareUtils, RealICQClient, LoggerImport,
  61. RealICQUtility, ConditionConfig, IdURI, IdHTTP, HTTPApp;
  62. var
  63. AGroupService: TGroupService;
  64. procedure ClearStringList(AStringList: TStringList);
  65. var
  66. AObj: TObject;
  67. begin
  68. if AStringList = nil then
  69. Exit;
  70. while AStringList.Count > 0 do
  71. begin
  72. Aobj := AStringList.Objects[0];
  73. AStringList.Delete(0);
  74. FreeAndNil(AObj);
  75. end;
  76. end;
  77. { TGroupService }
  78. function TGroupService.AddManager(ATeamID, ALoginName: string): Boolean;
  79. var
  80. AManagers: TStringList;
  81. begin
  82. if Trim(ALoginName) = '' then
  83. Exit;
  84. AManagers := TStringList.Create;
  85. try
  86. AManagers.Add(ALoginName);
  87. FGroupClient.AddTeamMembers(ATeamID, nil, AManagers);
  88. finally
  89. AManagers.Free;
  90. end;
  91. end;
  92. function TGroupService.AddMembers(AMembers: string; ANewMembers: TStrings): string;
  93. var
  94. iLoop: Integer;
  95. AMemberList: TStrings;
  96. begin
  97. iLoop := 0;
  98. Result := '';
  99. AMemberList := SplitString(AMembers, Chr(10));
  100. try
  101. for iLoop := AMemberList.Count - 1 downto 0 do
  102. begin
  103. if Length(Trim(AMemberList[iLoop])) = 0 then
  104. AMemberList.Delete(iLoop);
  105. end;
  106. for iLoop := 0 to ANewMembers.Count - 1 do
  107. if AMemberList.IndexOf(ANewMembers[iLoop]) < 0 then
  108. AMemberList.Add(ANewMembers[iLoop]);
  109. iLoop := 0;
  110. while iLoop < AMemberList.Count - 1 do
  111. begin
  112. Result := Result + AMemberList[iLoop] + Chr(10);
  113. Inc(iLoop);
  114. end;
  115. Result := Result + AMemberList[iLoop]
  116. finally
  117. AMemberList.Free;
  118. end;
  119. end;
  120. function TGroupService.AddMember(AMembers: string; ANewMember: string): string;
  121. begin
  122. Result := AMembers;
  123. if Pos(ANewMember, AMembers) > 0 then
  124. Exit;
  125. Result := AMembers + Chr(10) + ANewMember;
  126. end;
  127. procedure TGroupService.AddTeamMembers(ATeamID: string; AAddMembers: TStringList);
  128. begin
  129. FGroupClient.AddTeamMembers(ATeamID, AAddMembers, nil);
  130. end;
  131. constructor TGroupService.Create;
  132. begin
  133. FTeams := TStringList.Create;
  134. FGroupClient := TGroupClient.Create;
  135. FDownFile := TDownFile.Create;
  136. inherited;
  137. end;
  138. procedure TGroupService.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro: string; ATeamMembers: TStringList; AIsTempTeam: Boolean; ATeamValidateType: TRealICQTeamValidateType);
  139. begin
  140. FGroupClient.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro, ATeamMembers, AIsTempTeam);
  141. end;
  142. procedure TGroupService.RemoveTeamMembers(ATeamID: string; ARemoveMembers: TStringList);
  143. begin
  144. FGroupClient.RemoveTeamMembers(ATeamID, ARemoveMembers, nil);
  145. end;
  146. destructor TGroupService.Destroy;
  147. begin
  148. ClearStringList(FTeams);
  149. FreeAndNil(FGroupClient);
  150. FreeAndNil(FDownFile);
  151. inherited;
  152. end;
  153. procedure TGroupService.DisbandTeam(ATeamID: string);
  154. begin
  155. FGroupClient.RemoveTeam(ATeamID);
  156. end;
  157. function TGroupService.GetAlias(ATeamID, ALoginName: string): string;
  158. begin
  159. end;
  160. class function TGroupService.GetService: TGroupService;
  161. begin
  162. if AGroupService = nil then
  163. AGroupService := TGroupService.Create;
  164. Result := AGroupService;
  165. end;
  166. function TGroupService.GetTeam(ATeamID: string): TRealICQTeam;
  167. var
  168. iIndex: Integer;
  169. ATeam: TRealICQTeam;
  170. begin
  171. ATeam := nil;
  172. iIndex := FTeams.IndexOf(ATeamID);
  173. if iIndex > -1 then
  174. ATeam := FTeams.Objects[iIndex] as TRealICQTeam;
  175. Result := ATeam;
  176. end;
  177. function TGroupService.GetTeams: TStringList;
  178. begin
  179. Result := FTeams;
  180. end;
  181. procedure TGroupService.Init(ALoginName: string);
  182. begin
  183. FLoginName := ALoginName;
  184. FGroupClient.Connect(ALoginName);
  185. end;
  186. function TGroupService.IsTeamManager(ATeamID, ALoginName: string): Boolean;
  187. var
  188. iIndex: Integer;
  189. ATempTeam: TRealICQTeam;
  190. begin
  191. iIndex := FTeams.IndexOf(ATeamID);
  192. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  193. if (AnsiPos(Chr(10) + ALoginName + Chr(10), Chr(10) + ATempTeam.TeamManagers + Chr(10)) > 0) or (AnsiSameText(ALoginName, ATempTeam.TeamCreater)) then
  194. Result := True
  195. else
  196. Result := False;
  197. end;
  198. procedure TGroupService.JoinTeam(ATeamID, ATag: string);
  199. begin
  200. FGroupClient.JoinTeam(ATeamID, ATag);
  201. end;
  202. procedure TGroupService.JoinTeamResponse(ATeamID, ALoginName, ATag: string; Accepted: Boolean);
  203. begin
  204. FGroupClient.JoinTeamResponse(ATeamID, ALoginName, ATag, Accepted);
  205. end;
  206. procedure TGroupService.OnAddedManagers(ATeamID: string; AManagers: TStrings);
  207. var
  208. iLoop, iIndex: Integer;
  209. ATempTeam: TRealICQTeam;
  210. begin
  211. iIndex := FTeams.IndexOf(ATeamID);
  212. if iIndex < 0 then
  213. Exit;
  214. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  215. ATempTeam.TeamManagers := AddMembers(ATempTeam.TeamManagers, AManagers);
  216. MainForm.WebSocketSendReadTeamInfo(ATempTeam.TeamID);
  217. end;
  218. procedure TGroupService.OnAddedMembers(ATeamID: string; AMembers: TStrings);
  219. var
  220. iLoop, iIndex: Integer;
  221. ATempTeam: TRealICQTeam;
  222. begin
  223. iIndex := FTeams.IndexOf(ATeamID);
  224. if iIndex < 0 then
  225. begin
  226. FGroupClient.AsynTeam(ATeamID);
  227. Exit;
  228. end;
  229. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  230. ATempTeam.TeamMembers := AddMembers(ATempTeam.TeamMembers, AMembers);
  231. MainForm.WebSocketSendReadTeamInfo(ATempTeam.TeamID);
  232. end;
  233. procedure TGroupService.OnAddedTeam(ATeam: TRealICQTeam; ts: Int64);
  234. var
  235. iIndex: Integer;
  236. ATempTeam: TObject;
  237. LastMessageTime: TDateTime;
  238. LastMessageTimeTs: Int64;
  239. begin
  240. iIndex := FTeams.IndexOf(ATeam.TeamID);
  241. if iIndex > -1 then
  242. begin
  243. ATempTeam := FTeams.Objects[iIndex];
  244. if ATempTeam <> nil then
  245. FreeAndNil(ATempTeam);
  246. FTeams.Delete(iIndex);
  247. end;
  248. FTeams.AddObject(ATeam.TeamID, ATeam.Clone);
  249. MainForm.WebSocketSendReadTeamInfo(ATeam.TeamID);
  250. LastMessageTime := MainForm.DBHistory.GetLastMessageTimeByTeamID(ATeam.TeamID);
  251. if (LastMessageTime = 0) and (ts <= 0) then
  252. Exit
  253. else if (LastMessageTime = 0) and (ts > 0) then
  254. FGroupClient.GetHistoryMessages(ATeam.TeamID, ts)
  255. else
  256. begin
  257. LastMessageTimeTs :=(DateTimeToUnix(LastMessageTime) - 8*60*60) * 1000;
  258. FGroupClient.GetHistoryMessages(ATeam.TeamID, LastMessageTimeTs);
  259. end;
  260. end;
  261. procedure TGroupService.OnDeletedManagers(ATeamID: string; AManagers: TStrings);
  262. var
  263. iLoop, iIndex: Integer;
  264. ATempTeam: TRealICQTeam;
  265. begin
  266. iIndex := FTeams.IndexOf(ATeamID);
  267. if iIndex < 0 then
  268. Exit;
  269. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  270. ATempTeam.TeamManagers := RemoveMembers(ATempTeam.TeamManagers, AManagers);
  271. MainForm.WebSocketSendReadTeamInfo(ATempTeam.TeamID);
  272. end;
  273. procedure TGroupService.OnDeletedMembers(ATeamID: string; AMembers: TStrings);
  274. var
  275. iLoop, iIndex: Integer;
  276. ATempTeam: TRealICQTeam;
  277. begin
  278. iIndex := FTeams.IndexOf(ATeamID);
  279. if iIndex < 0 then
  280. Exit;
  281. for iLoop := 0 to AMembers.Count - 1 do
  282. if SameText(FLoginName, AMembers[iLoop]) then
  283. begin
  284. MainForm.WebSocketQuitTeam(ATeamID);
  285. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  286. if ATempTeam <> nil then
  287. FreeAndNil(ATempTeam);
  288. FTeams.Delete(iIndex);
  289. Exit;
  290. end;
  291. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  292. ATempTeam.TeamMembers := RemoveMembers(ATempTeam.TeamMembers, AMembers);
  293. ATempTeam.TeamManagers := RemoveMembers(ATempTeam.TeamManagers, AMembers);
  294. MainForm.WebSocketSendReadTeamInfo(ATempTeam.TeamID);
  295. end;
  296. procedure TGroupService.OnDeletedTeam(ATeamID: string);
  297. var
  298. iIndex: Integer;
  299. begin
  300. iIndex := FTeams.IndexOf(ATeamID);
  301. if iIndex >= 0 then
  302. begin
  303. MainForm.WebSocketRemoveTeamResponse(ATeamID);
  304. FTeams.Delete(iIndex);
  305. end;
  306. end;
  307. procedure TGroupService.OnMessage(ATeamID, ASender, AContent, AStyle: string; ASendTime: TDateTime; AMSGType: Integer; ALength: Integer);
  308. const
  309. AParam: string = '?center=%s&marker=%s&lat=%s&lng=%s';
  310. var
  311. tmpStrs: TStrings;
  312. begin
  313. if AMSGType = 2 then
  314. MainForm.WebSocketRecivedbroadcastmesssage('', ATeamID, ASender, AStyle, '[image-src="' + AContent + '"]', ASendTime)
  315. else if AMSGType = 3 then
  316. MainForm.RealICQClientReceivedOfflineFile(nil, ASender, AContent, ALength, ASendTime)
  317. else if AMSGType = 4 then
  318. // MainForm.WebSocketRecivedbroadcastmesssage('', ATeamID, ASender, AStyle, '', ASendTime)
  319. else if AMSGType = 5 then
  320. begin
  321. tmpStrs := TRealICQUtility.SplitString(AContent, ':');
  322. try
  323. AContent := '[map-src="' + (TConditionConfig.GetConfig.MapHost + Format(AParam, [HTTPEncode(UTF8Encode(tmpStrs[0])), HTTPEncode(UTF8Encode(tmpStrs[1])), tmpStrs[2], tmpStrs[3]])) + '"]';
  324. MainForm.WebSocketRecivedbroadcastmesssage('', ATeamID, ASender, AStyle, AContent, ASendTime)
  325. finally
  326. tmpStrs.Free;
  327. end;
  328. end
  329. else
  330. MainForm.WebSocketRecivedbroadcastmesssage('', ATeamID, ASender, AStyle, AContent, ASendTime);
  331. end;
  332. procedure TGroupService.OnMessageReaded(ATeamID: string; ts: Int64);
  333. var
  334. AList: TList;
  335. i: Integer;
  336. begin
  337. i := MainForm.NotReadMessages.IndexOf(MainFrm.TeamMessageID + ATeamID);
  338. if i > -1 then
  339. begin
  340. AList := MainForm.NotReadMessages.Objects[i] as TList;
  341. MainForm.NotReadMessages.Delete(i);
  342. TRealICQUtility.FreeList(AList);
  343. MainForm.StopHeadImageFlash(ATeamID);
  344. end;
  345. end;
  346. procedure TGroupService.OnReceivedApplyBoardcast(ATeamID, ALoginName, ATag: string);
  347. begin
  348. MainForm.WebSocketJionTeamRequest(ATeamID, ALoginName, ATag);
  349. end;
  350. procedure TGroupService.OnReceivedReplyBoardcast(ATeamID, ALoginName, ATag: string; ARet: Integer);
  351. var
  352. iIndex: Integer;
  353. ATempTeam: TRealICQTeam;
  354. begin
  355. if SameText(ALoginName, FLoginName) then
  356. case ARet of
  357. 0:
  358. begin
  359. MainForm.RealICQClientJoinTeamResponse(nil, ATeamID, '管理员', ATag, False);
  360. end;
  361. 1:
  362. begin
  363. FGroupClient.AsynTeam(ATeamID);
  364. MainForm.RealICQClientJoinTeamResponse(nil, ATeamID, '管理员', ATag, True);
  365. end;
  366. 5:
  367. begin
  368. MessageBox(SearchTeamForm.Handle, PChar('申请加入的群组不允许任何人加入!!!'), '提示', MB_ICONINFORMATION);
  369. end;
  370. end
  371. else
  372. begin
  373. if ARet = 1 then
  374. begin
  375. iIndex := FTeams.IndexOf(ATeamID);
  376. if iIndex < 0 then
  377. Exit;
  378. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  379. ATempTeam.TeamMembers := AddMember(ATempTeam.TeamMembers, ALoginName);
  380. MainForm.WebSocketSendReadTeamInfo(ATempTeam.TeamID);
  381. end;
  382. end;
  383. end;
  384. procedure TGroupService.OnSearched(ARecords: TStringList; ASkip, ALimit: Integer);
  385. begin
  386. SearchTeamForm.ShowTeamSearchResult(ARecords);
  387. end;
  388. procedure TGroupService.OnTeamInfoChange(ATeam: TRealICQTeam);
  389. var
  390. iIndex: Integer;
  391. ATempTeam: TRealICQTeam;
  392. begin
  393. iIndex := FTeams.IndexOf(ATeam.TeamID);
  394. if iIndex > -1 then
  395. begin
  396. ATempTeam := FTeams.Objects[iIndex] as TRealICQTeam;
  397. if ATempTeam = nil then
  398. Exit;
  399. ATempTeam.TeamCaption := ATeam.TeamCaption;
  400. ATempTeam.TeamIntro := ATeam.TeamIntro;
  401. ATempTeam.TeamCallBoard := ATeam.TeamCallBoard;
  402. ATempTeam.TeamValidate := ATeam.TeamValidate;
  403. MainForm.WebSocketSendReadTeamInfo(ATeam.TeamID);
  404. end;
  405. end;
  406. procedure TGroupService.OnUploaded(ADownloadURL, AFileName: string);
  407. begin
  408. FDownFile.OnComplete := DownFaceFileComplete;
  409. FDownFile.ThreadDownFile(ADownloadURL, TRealICQClient.GetReceivedFaceDir + AFileName);
  410. end;
  411. procedure TGroupService.DownFaceFileComplete(Source_file, Dest_file: string; blStatus: boolean; ErrMessage: string);
  412. begin
  413. if not blStatus then
  414. begin
  415. Error(ErrMessage, '下载群图片');
  416. Exit;
  417. end;
  418. ShowGettedFace(Dest_file);
  419. end;
  420. procedure TGroupService.QuitTeam(ATeamID: string);
  421. var
  422. AMembers: TStringList;
  423. begin
  424. AMembers := TStringList.Create;
  425. try
  426. AMembers.Add(FLoginName);
  427. FGroupClient.RemoveTeamMembers(ATeamID, AMembers, nil);
  428. finally
  429. AMembers.Free;
  430. end;
  431. end;
  432. function TGroupService.RemoveManager(ATeamID, ALoginName: string): Boolean;
  433. var
  434. AManagers: TStringList;
  435. begin
  436. if Trim(ALoginName) = '' then
  437. Exit;
  438. AManagers := TStringList.Create;
  439. try
  440. AManagers.Add(ALoginName);
  441. FGroupClient.RemoveTeamMembers(ATeamID, nil, AManagers);
  442. finally
  443. AManagers.Free;
  444. end;
  445. // FGroupClient.RemoveManager();
  446. end;
  447. function TGroupService.RemoveMembers(AMembers: string; ARemoveMembers: TStrings): string;
  448. var
  449. iLoop, iIndex: Integer;
  450. AMemberList: TStrings;
  451. begin
  452. iLoop := 0;
  453. Result := '';
  454. AMemberList := SplitString(AMembers, Chr(10));
  455. try
  456. for iLoop := AMemberList.Count - 1 downto 0 do
  457. begin
  458. if Length(Trim(AMemberList[iLoop])) = 0 then
  459. AMemberList.Delete(iLoop);
  460. end;
  461. for iLoop := 0 to ARemoveMembers.Count - 1 do
  462. begin
  463. iIndex := AMemberList.IndexOf(ARemoveMembers[iLoop]);
  464. if iIndex > -1 then
  465. AMemberList.Delete(iIndex);
  466. end;
  467. iLoop := 0;
  468. while iLoop < AMemberList.Count - 1 do
  469. begin
  470. Result := Result + AMemberList[iLoop] + Chr(10);
  471. Inc(iLoop);
  472. end;
  473. Result := Result + AMemberList[iLoop]
  474. finally
  475. AMemberList.Free;
  476. end;
  477. end;
  478. procedure TGroupService.SearchTeam(AKey: string; ASearchType: TRealICQTeamSearchType; AMatchingType: TRealICQMatchingType; APage: Integer);
  479. begin
  480. case ASearchType of
  481. tsByTeamID:
  482. FGroupClient.SearchTeam(AKey, '', '', '', AMatchingType, 0, 500);
  483. tsByTeamCaption:
  484. FGroupClient.SearchTeam('', AKey, '', '', AMatchingType, 0, 500);
  485. tsByTeamIntro:
  486. FGroupClient.SearchTeam('', '', AKey, '', AMatchingType, 0, 500);
  487. // tsByTeamCreater: FGroupClient.SearchTeam('', '', '', '', 0, 500);
  488. end;
  489. end;
  490. procedure TGroupService.SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: string);
  491. begin
  492. FGroupClient.SendTeamMessage(ATeamID, ASender, AMsg, AFont, AFaces, Attachs);
  493. end;
  494. procedure TGroupService.SetAlias(ATeamID, ALoginName, Alias: string);
  495. begin
  496. end;
  497. procedure TGroupService.Uninstall;
  498. var
  499. iIndex: Integer;
  500. ATeam: TRealICQTeam;
  501. begin
  502. ATeam := nil;
  503. for iIndex := 0 to FTeams.Count - 1 do
  504. begin
  505. ATeam := FTeams.Objects[iIndex] as TRealICQTeam;
  506. // FGroupClient.MessageMiscMust(ATeam.TeamID);
  507. end;
  508. FGroupClient.Disconnect;
  509. end;
  510. procedure TGroupService.MessageMiscMust(ATeamID: string);
  511. begin
  512. FGroupClient.MessageMiscMust(ATeamID);
  513. end;
  514. procedure TGroupService.UpdateTeam(ATeamID, AIntro, ANotice, AName: string; AAuth: Integer);
  515. begin
  516. FGroupClient.UpdateTeamInfo(ATeamID, AIntro, ANotice, AName, AAuth);
  517. end;
  518. procedure TGroupService.UpdateTeamMembers(ATeamID: string; AOldMembers, ANewMembers: TStringList);
  519. var
  520. iLoop: Integer;
  521. ATeamAddMembers, ATeamRemoveMembers: TStringList;
  522. MemberListChanged: Boolean;
  523. begin
  524. ATeamAddMembers := TStringList.Create;
  525. ATeamRemoveMembers := TStringList.Create;
  526. MemberListChanged := False;
  527. for iLoop := 0 to ANewMembers.Count - 1 do
  528. begin
  529. if AOldMembers.IndexOf(ANewMembers[iLoop]) = -1 then
  530. begin
  531. MemberListChanged := True;
  532. ATeamAddMembers.Add(ANewMembers[iLoop]);
  533. end;
  534. end;
  535. if MemberListChanged then
  536. AddTeamMembers(ATeamID, ATeamAddMembers);
  537. MemberListChanged := False;
  538. for iLoop := 0 to AOldMembers.Count - 1 do
  539. begin
  540. if Length(Trim(AOldMembers[iLoop])) = 0 then
  541. Continue;
  542. if ANewMembers.IndexOf(AOldMembers[iLoop]) = -1 then
  543. begin
  544. MemberListChanged := True;
  545. ATeamRemoveMembers.Add(AOldMembers[iLoop]);
  546. end;
  547. end;
  548. if MemberListChanged then
  549. RemoveTeamMembers(ATeamID, ATeamRemoveMembers);
  550. ATeamAddMembers.Free;
  551. ATeamRemoveMembers.Free;
  552. end;
  553. end.