1package eu.siacs.conversations.http.services;
2
3import com.google.common.base.Objects;
4
5import java.util.Collections;
6import java.util.List;
7import java.util.Set;
8
9import eu.siacs.conversations.services.AvatarService;
10import eu.siacs.conversations.utils.LanguageUtils;
11import eu.siacs.conversations.utils.UIHelper;
12import retrofit2.Call;
13import retrofit2.http.Body;
14import retrofit2.http.GET;
15import retrofit2.http.POST;
16import retrofit2.http.Query;
17import rocks.xmpp.addr.Jid;
18
19public interface MuclumbusService {
20
21 @GET("/api/1.0/rooms/unsafe")
22 Call<Rooms> getRooms(@Query("p") int page);
23
24 @POST("/api/1.0/search")
25 Call<SearchResult> search(@Body SearchRequest searchRequest);
26
27 class Rooms {
28 int page;
29 int total;
30 int pages;
31 public List<Room> items;
32 }
33
34 class Room implements AvatarService.Avatarable {
35
36 public String address;
37 public String name;
38 public String description;
39 public String language;
40
41 public String getName() {
42 return name;
43 }
44
45 public String getDescription() {
46 return description;
47 }
48
49 public Jid getRoom() {
50 try {
51 return Jid.of(address);
52 } catch (IllegalArgumentException e) {
53 return null;
54 }
55 }
56
57 public String getLanguage() {
58 return LanguageUtils.convert(language);
59 }
60
61 @Override
62 public int getAvatarBackgroundColor() {
63 Jid room = getRoom();
64 return UIHelper.getColorForName(room != null ? room.asBareJid().toEscapedString() : name);
65 }
66
67 @Override
68 public boolean equals(Object o) {
69 if (this == o) return true;
70 if (o == null || getClass() != o.getClass()) return false;
71 Room room = (Room) o;
72 return Objects.equal(address, room.address) &&
73 Objects.equal(name, room.name) &&
74 Objects.equal(description, room.description);
75 }
76
77 @Override
78 public int hashCode() {
79 return Objects.hashCode(address, name, description);
80 }
81 }
82
83 class SearchRequest {
84
85 public final Set<String> keywords;
86
87 public SearchRequest(String keyword) {
88 this.keywords = Collections.singleton(keyword);
89 }
90 }
91
92 class SearchResult {
93
94 public Result result;
95
96 }
97
98 class Result {
99
100 public List<Room> items;
101
102 }
103
104}