| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606 |
- unit TeamsAdapter;
- interface
- uses
- StrUtils, Classes, SysUtils, Groups, Graphics, RealICQClient, DownloadFileFromWeb,
- RealICQModel;
- type
- TTeamsAdapter = class
- private
- class procedure NewUpdateTeamMembers(ATeamID: String; AOldMembers, ANewMembers: TStringList);
- class procedure OldUpdateTeamMembers(ATeamID: String; AOldMembers, ANewMembers: TStringList);
- public
- class procedure Start(ACurrentLoginName: string);
- class procedure Stop;
- class procedure UpdateTeamMembers(ATeamID: String; AOldMembers, ANewMembers: TStringList);
- class procedure AddTeamMembers(ATeamID: String; AAddMembers: TStringList);
- class procedure UpdateTeamInfo(ATeamID, AIntro, ANotice, AName: string; AAuth: Integer);
- class procedure SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: String);
- class function RemoveManager(ATeamID, ALoginName: string): Boolean;
- class function AddManager(ATeamID, ALoginName: string): Boolean;
- class procedure Subscribe;
- class procedure UnSubscribe;
- class function IsTeamManager(ATeamID, ALoginName: string): Boolean;
- class procedure SearchTeam(AKey: string; ASearchType: TRealICQTeamSearchType; AMatchingType: TRealICQMatchingType; APage: Integer);
- class procedure QuitTeam(ATeamID: String);
- class procedure DisbandTeam(ATeamID: String);
- class procedure JoinTeam(ATeamID, ATag: string);
- class procedure JoinTeamResponse(ATeamID, ALoginName, ATag: string; Accepted: Boolean);
- class procedure SetAlias(ATeamID, ALoginName, Alias: String);
- class function GetAlias(ATeamID, ALoginName: string): string;
- class function GetTeam(ATeamID: string): TRealICQTeam;
- class function GetTeams: TStringList;
- class procedure CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro: String;
- ATeamMembers: TStringList; AIsTempTeam: Boolean; ATeamValidateType: TRealICQTeamValidateType);
- class procedure MessageMiscMust(ATeamID: string);
- end;
- implementation
- uses
- MainFrm, Windows, xFonts, Dialogs, GroupConfig, GroupService, RealICQUtils,
- BaseService;
- {$DEFINE GroupV3.2+}
- { TTeamsAdapter }
- class procedure TTeamsAdapter.DisbandTeam(ATeamID: String);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.DisbandTeam(ATeamID);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.RemoveTeam(ATeamID)
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.DisbandTeam(ATeamID);
- end;
- class procedure TTeamsAdapter.QuitTeam(ATeamID: String);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.QuitTeam(ATeamID);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.Leave(ATeamID)
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.QuitTeam(ATeamID);
- end;
- class procedure TTeamsAdapter.AddTeamMembers(ATeamID: String;
- AAddMembers: TStringList);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.AddTeamMembers(ATeamID, AAddMembers);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.AddTeamMembers(ATeamID, AAddMembers);
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.ModifyTeamMembers(ATeamID, AAddMembers);
- end;
- class function TTeamsAdapter.IsTeamManager(ATeamID, ALoginName: string): Boolean;
- var
- iIndex: Integer;
- RealICQTeam: TRealICQTeam;
- Team: TRealICQTeam;
- begin
- Result := False;
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- Result := TGroupService.GetService.IsTeamManager(ATeamID, ALoginName);
- {$ELSE}
- if Group = nil then
- Exit;
- iIndex := group.Teams.IndexOf(ATeamID);
- RealICQTeam := group.Teams.Objects[iIndex] as TRealICQTeam;
- if (AnsiPos(Chr(10) + ALoginName + Chr(10), Chr(10) + RealICQTeam.TeamManagers + Chr(10)) > 0) or
- (AnsiSameText(ALoginName, RealICQTeam.TeamCreater)) then
- Result := True
- else
- Result := False;
- {$ENDIF}
- end
- else
- begin
- iIndex := MainForm.RealICQClient.Teams.IndexOf(ATeamID);
- if iIndex = -1 then Exit;
- Team := MainForm.RealICQClient.Teams.Objects[iIndex] as TRealICQTeam;
- if (AnsiPos(Chr(10) + ALoginName + Chr(10), Chr(10) + Team.TeamManagers + Chr(10)) <= 0) then
- Result := False
- else
- Result := True;
- end;
- end;
- class procedure TTeamsAdapter.JoinTeam(ATeamID, ATag: string);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.JoinTeam(ATeamID, ATag);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.JoinTeam(ATeamID, ATag)
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.JoinTeam(ATeamID, ATag);
- end;
- class procedure TTeamsAdapter.JoinTeamResponse(ATeamID, ALoginName, ATag: string; Accepted: Boolean);
- var
- ret: Integer;
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.JoinTeamResponse(ATeamID, ALoginName, ATag, Accepted);
- {$ELSE}
- if Group = nil then
- Exit;
- if Accepted then
- ret := 0
- else
- ret := 1;
- Group.JoinTeamResponse(ATeamID, ALoginName, ATag, ret);
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.JoinTeamResponse(ATeamID, ALoginName, ATag, Accepted);
- end;
- class procedure TTeamsAdapter.MessageMiscMust(ATeamID: string);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- TGroupService.GetService.MessageMiscMust(ATeamID);
- end;
- class procedure TTeamsAdapter.NewUpdateTeamMembers(ATeamID: String; AOldMembers,
- ANewMembers: TStringList);
- var
- iLoop: Integer;
- ATeamAddMembers,
- ATeamRemoveMembers: TStringList;
- MemberListChanged: Boolean;
- begin
- ATeamAddMembers := TStringList.Create;
- ATeamRemoveMembers := TStringList.Create;
- MemberListChanged := False;
- for iLoop := 0 to ANewMembers.Count - 1 do
- begin
- if AOldMembers.IndexOf(ANewMembers[iLoop]) = -1 then
- begin
- MemberListChanged := True;
- ATeamAddMembers.Add(ANewMembers[iLoop]);
- end;
- end;
- if MemberListChanged then
- Group.AddTeamMembers(ATeamID,ATeamAddMembers);
- MemberListChanged := False;
- for iLoop := 0 to AOldMembers.Count - 1 do
- begin
- if Length(Trim(AOldMembers[iLoop])) = 0 then Continue;
- if ANewMembers.IndexOf(AOldMembers[iLoop]) = -1 then
- begin
- MemberListChanged := True;
- ATeamRemoveMembers.Add(AOldMembers[iLoop]);
- end;
- end;
- if MemberListChanged then
- Group.RemoveTeamMembers(ATeamID,ATeamRemoveMembers);
- ATeamAddMembers.Free;
- ATeamRemoveMembers.Free;
- end;
- class procedure TTeamsAdapter.OldUpdateTeamMembers(ATeamID: String; AOldMembers,
- ANewMembers: TStringList);
- var
- iLoop: Integer;
- MemberListChanged: Boolean;
- MembersStr: string;
- begin
- MemberListChanged := AOldMembers.Count <> ANewMembers.Count;
- if not MemberListChanged then
- for iLoop := 0 to ANewMembers.Count - 1 do
- begin
- if AOldMembers.IndexOf(ANewMembers[iLoop]) = -1 then
- begin
- MemberListChanged := True;
- Break;
- end;
- end;
- if not MemberListChanged then
- for iLoop := 0 to AOldMembers.Count - 1 do
- begin
- if Length(Trim(AOldMembers[iLoop])) = 0 then Continue;
- if ANewMembers.IndexOf(AOldMembers[iLoop]) = -1 then
- begin
- MemberListChanged := True;
- Break;
- end;
- end;
-
- if MemberListChanged then
- MainForm.RealICQClient.ModifyTeamMembers(ATeamID, ANewMembers);
- end;
- class function TTeamsAdapter.RemoveManager(ATeamID, ALoginName: string): Boolean;
- var
- ATeam: TRealICQTeam;
- iIndex, iLoop: Integer;
- ANewManagers: string;
- ANewManagerList: TStringList;
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.RemoveManager(ATeamID, ALoginName);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.RemoveManager(ATeamID, ALoginName);
- {$ENDIF}
- end
- else
- begin
- iIndex := MainForm.RealICQClient.Teams.IndexOf(ATeamID);
- if iIndex < 0 then
- Exit;
- ATeam := MainForm.RealICQClient.Teams.Objects[iIndex] as TRealICQTeam;
- if ATeam.TeamManagers = '' then
- Exit;
- ANewManagerList := SplitString(ATeam.TeamManagers, Chr(10));
- try
- iLoop := 0;
- while iLoop < ANewManagerList.Count do
- begin
- if ANewManagerList[iLoop] = '' then
- ANewManagerList.Delete(iLoop);
- Inc(iLoop);
- end;
- ALoginName := TBaseService.FullLoginName(MainForm.RealICQClient.CenterServerID, MainForm.RealICQClient.ServerID, ALoginName);
- for iLoop := 0 to ANewManagerList.Count - 1 do
- if SameText(TBaseService.FullLoginName(MainForm.RealICQClient.CenterServerID, MainForm.RealICQClient.ServerID, ANewManagerList[iLoop]), ALoginName) then
- begin
- ANewManagerList.Delete(iLoop);
- MainForm.RealICQClient.ModifyTeamManagers(ATeam.TeamID, ANewManagerList);
- Break;
- end;
- finally
- FreeAndNil(ANewManagerList);
- end;
- end;
- end;
- class function TTeamsAdapter.AddManager(ATeamID, ALoginName: string): Boolean;
- var
- ATeam: TRealICQTeam;
- iIndex, iLoop: Integer;
- ANewManagers: string;
- ANewManagerList: TStringList;
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.AddManager(ATeamID, ALoginName);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.AddManager(ATeamID, ALoginName);
- {$ENDIF}
- end
- else
- begin
- iIndex := MainForm.RealICQClient.Teams.IndexOf(ATeamID);
- if iIndex < 0 then
- Exit;
- ATeam := MainForm.RealICQClient.Teams.Objects[iIndex] as TRealICQTeam;
- if ATeam.TeamManagers = '' then
- ANewManagerList := TStringList.Create
- else
- ANewManagerList := SplitString(ATeam.TeamManagers, Chr(10));
- try
- iLoop := 0;
- while iLoop < ANewManagerList.Count do
- begin
- if ANewManagerList[iLoop] = '' then
- ANewManagerList.Delete(iLoop);
- Inc(iLoop);
- end;
- ALoginName := TBaseService.FullLoginName(MainForm.RealICQClient.CenterServerID, MainForm.RealICQClient.ServerID, ALoginName);
- for iLoop := 0 to ANewManagerList.Count - 1 do
- if SameText(TBaseService.FullLoginName(MainForm.RealICQClient.CenterServerID, MainForm.RealICQClient.ServerID, ANewManagerList[iLoop]), ALoginName) then
- begin
- ANewManagerList.Delete(iLoop);
- FreeAndNil(ANewManagerList);
- Exit;
- end;
- ANewManagerList.Add(ALoginName);
- MainForm.RealICQClient.ModifyTeamManagers(ATeam.TeamID, ANewManagerList);
- finally
- FreeAndNil(ANewManagerList);
- end;
- end;
- end;
- class procedure TTeamsAdapter.UpdateTeamMembers(ATeamID: String; AOldMembers,
- ANewMembers: TStringList);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.UpdateTeamMembers(ATeamID, AOldMembers, ANewMembers);
- {$ELSE}
- if Group = nil then
- Exit;
- NewUpdateTeamMembers(ATeamID, AOldMembers, ANewMembers)
- {$ENDIF}
- end
- else
- OldUpdateTeamMembers(ATeamID, AOldMembers, ANewMembers)
- end;
- class procedure TTeamsAdapter.UnSubscribe;
- begin
- if (TGroupConfig.GetConfig.GroupVersion = gvIndependent) and (Group <> nil) then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.Uninstall;
- {$ELSE}
- if Group = nil then
- Exit;
- Group.UnSubscribe;
- {$ENDIF}
- end;
- end;
- class procedure TTeamsAdapter.UpdateTeamInfo(ATeamID, AIntro, ANotice, AName: string; AAuth: Integer);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- if AAuth = 2 then
- AAuth := 4;
- TGroupService.GetService.UpdateTeam(ATeamID, AIntro, ANotice, AName, AAuth);
- {$ELSE}
- if Group = nil then
- Exit;
- if AAuth = 2 then
- AAuth := 4;
- Group.UpdateTeamInfo(ATeamID, AIntro, ANotice, AName, AAuth);
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.ModifyTeamBaseInfo(ATeamID, AName, ANotice, AName, TRealICQTeamValidateType(AAuth));
- end;
- class procedure TTeamsAdapter.SearchTeam(AKey: string; ASearchType: TRealICQTeamSearchType; AMatchingType: TRealICQMatchingType;
- APage: Integer);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.SearchTeam(AKey, ASearchType, AMatchingType, APage);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.Search(AKey, '', '', '');
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.SearchTeam(ASearchType, AKey, AMatchingType, APage);
- end;
- class procedure TTeamsAdapter.SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: String);
- var
- RealICQTeamMessage: TRealICQTeamMessage;
- aDateTime: TDateTime;
- AFontStr: string;
- begin
- AFontStr := FontToString(AFont);
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.SendTeamMessage(ATeamID, ASender, AMsg, AFont, AFaces, Attachs);
- RealICQTeamMessage:= TRealICQTeamMessage.Create(ATeamID,ASender,AFontStr,AMsg,False);
- RealICQTeamMessage.MessageID := GetTickCount();
- RealICQTeamMessage.SendDateTime := Now();
- // TGroupService.GetService.MessageMiscMust(ATeamID);
- MainForm.ShowRealICQTeamMessage(RealICQTeamMessage, False);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.SendTeamMessage(ATeamID, ASender, AMsg, AFont, AFaces, Attachs);
- RealICQTeamMessage:= TRealICQTeamMessage.Create(ATeamID,ASender,AFontStr,AMsg,False);
- RealICQTeamMessage.MessageID := GetTickCount();
- RealICQTeamMessage.SendDateTime := Now();
- MainForm.ShowRealICQTeamMessage(RealICQTeamMessage, False);
- {$ENDIF}
- end
- else
- begin
- MainForm.RealICQClient.SendTeamMessage(False, ATeamID, AFontStr, AMsg);
- end;
- end;
- class procedure TTeamsAdapter.SetAlias(ATeamID, ALoginName, Alias: String);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.SetAlias(ATeamID, ALoginName, Alias);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.SetAlias(ATeamID, ALoginName, Alias)
- {$ENDIF}
- end
- else
- Dialogs.ShowMessage('集成群组版本不支持群成员别名!');
- end;
- class procedure TTeamsAdapter.Start(ACurrentLoginName: string);
- var
- AConfig: TGroupConfig;
- begin
- AConfig := TGroupConfig.Load;
- if AConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.Init(ACurrentLoginName);
- {$ELSE}
- if ACurrentLoginName = '' then
- Exit;
- if Group <> nil then
- begin
- Group.Close;
- FreeAndNil(Group);
- end;
- Group := TGroup.Create;
- Group.IP := AConfig.IP;
- Group.Port := AConfig.Port;
- Group.ImageIP := AConfig.ImageIP;
- Group.ImagePort := AConfig.ImagePort;
- Group.LoginName := ACurrentLoginName;
- Group.Start;
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.SendGetTeamList;
- end;
- class procedure TTeamsAdapter.Stop;
- var
- AConfig: TGroupConfig;
- begin
- AConfig := TGroupConfig.GetConfig;
- if AConfig <> nil then
- begin
- if AConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.Uninstall;
- {$ELSE}
- if Group <> nil then
- begin
- Group.UnSubscribe;
- Group.Close;
- FreeAndNil(Group);
- end;
- {$ENDIF}
- end;
- end;
- end;
- class function TTeamsAdapter.GetAlias(ATeamID, ALoginName: string): string;
- begin
- Result := '';
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.GetAlias(ATeamID, ALoginName);
- {$ELSE}
- if Group = nil then
- Exit;
- Result := Group.GetAlias(ATeamID, ALoginName)
- {$ENDIF}
- end;
- end;
- class function TTeamsAdapter.GetTeam(ATeamID: string): TRealICQTeam;
- var
- iIndex: Integer;
- begin
- Result := nil;
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- Result := TGroupService.GetService.GetTeam(ATeamID);
- {$ELSE}
- if Group = nil then
- Exit;
- iIndex := Group.Teams.IndexOf(ATeamID);
- if iIndex >= 0 then
- Result := Group.Teams.Objects[iIndex] as TRealICQTeam;
- {$ENDIF}
- end
- else
- begin
- iIndex := MainForm.RealICQClient.Teams.IndexOf(ATeamID);
- if iIndex >= 0 then
- Result := MainForm.RealICQClient.Teams.Objects[iIndex] as TRealICQTeam;
- end;
- end;
- class function TTeamsAdapter.GetTeams: TStringList;
- begin
- Result := nil;
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- Result := TGroupService.GetService.GetTeams;
- {$ELSE}
- if Group = nil then
- Exit;
- Result := Group.Teams;
- {$ENDIF}
- end
- else
- Result := MainForm.RealICQClient.Teams;
- end;
- class procedure TTeamsAdapter.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro: String;
- ATeamMembers: TStringList; AIsTempTeam: Boolean; ATeamValidateType: TRealICQTeamValidateType);
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- TGroupService.GetService.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro, ATeamMembers, AIsTempTeam, ATeamValidateType);
- {$ELSE}
- if Group = nil then
- Exit;
- Group.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro, ATeamMembers, AIsTempTeam);
- {$ENDIF}
- end
- else
- MainForm.RealICQClient.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro, ATeamMembers, AIsTempTeam, ATeamValidateType);
- end;
- class procedure TTeamsAdapter.Subscribe;
- begin
- if TGroupConfig.GetConfig.GroupVersion = gvIndependent then
- begin
- {$IFDEF GroupV3.2+}
- {$ELSE}
- if Group = nil then
- Exit;
- Group.Subscribe;
- {$ENDIF}
- end;
- end;
- end.
|