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