1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2011, 2012, 2013, 2016, Jonathan Schleifer <js@heap.zone>
* Copyright (c) 2011, 2012, 2013, Florian Zeitz <florob@babelmonkeys.de>
*
* https://heap.zone/objxmpp/
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice is present in all copies.
|
|
|
1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2011, 2012, 2013, 2016, 2019, Jonathan Schleifer <js@heap.zone>
* Copyright (c) 2011, 2012, 2013, Florian Zeitz <florob@babelmonkeys.de>
*
* https://heap.zone/objxmpp/
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice is present in all copies.
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#include <inttypes.h>
#import "XMPPPresence.h"
#import "namespaces.h"
/* This provides us with sortable values for show values */
static int
show_to_int(OFString *show)
{
if ([show isEqual: @"chat"])
return 0;
if (show == nil)
return 1; /* available */
if ([show isEqual: @"away"])
return 2;
|
|
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#include <inttypes.h>
#import "XMPPPresence.h"
#import "namespaces.h"
/* This provides us with sortable values for show values */
static int
showToInt(OFString *show)
{
if ([show isEqual: @"chat"])
return 0;
if (show == nil)
return 1; /* available */
if ([show isEqual: @"away"])
return 2;
|
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
self = [super initWithElement: element];
@try {
OFXMLElement *subElement;
if ((subElement = [element elementForName: @"show"
namespace: XMPP_NS_CLIENT]))
[self setShow: [subElement stringValue]];
if ((subElement = [element elementForName: @"status"
namespace: XMPP_NS_CLIENT]))
[self setStatus: [subElement stringValue]];
if ((subElement = [element elementForName: @"priority"
namespace: XMPP_NS_CLIENT]))
[self setPriority:
[OFNumber numberWithIntMax:
[[subElement stringValue] decimalValue]]];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
|
|
|
|
|
<
|
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
self = [super initWithElement: element];
@try {
OFXMLElement *subElement;
if ((subElement = [element elementForName: @"show"
namespace: XMPP_NS_CLIENT]))
self.show = subElement.stringValue;
if ((subElement = [element elementForName: @"status"
namespace: XMPP_NS_CLIENT]))
self.status = subElement.stringValue;
if ((subElement = [element elementForName: @"priority"
namespace: XMPP_NS_CLIENT]))
self.priority = [OFNumber
numberWithIntMax: subElement.decimalValue];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
|
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
old = _status;
_status = [status copy];
[old release];
}
- (void)setPriority: (OFNumber *)priority
{
intmax_t prio = [priority intMaxValue];
OFNumber *old;
if ((prio < -128) || (prio > 127))
@throw [OFInvalidArgumentException exception];
OFXMLElement *oldPriority = [self elementForName: @"priority"
namespace: XMPP_NS_CLIENT];
if (oldPriority != nil)
[self removeChild: oldPriority];
OFString *priority_s =
[OFString stringWithFormat: @"%" @PRId8, [priority int8Value]];
[self addChild: [OFXMLElement elementWithName: @"priority"
namespace: XMPP_NS_CLIENT
stringValue: priority_s]];
old = _priority;
_priority = [priority copy];
[old release];
|
|
|
|
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
old = _status;
_status = [status copy];
[old release];
}
- (void)setPriority: (OFNumber *)priority
{
intmax_t prio = priority.intMaxValue;
OFNumber *old;
if ((prio < -128) || (prio > 127))
@throw [OFInvalidArgumentException exception];
OFXMLElement *oldPriority = [self elementForName: @"priority"
namespace: XMPP_NS_CLIENT];
if (oldPriority != nil)
[self removeChild: oldPriority];
OFString *priority_s =
[OFString stringWithFormat: @"%" @PRId8, priority.int8Value];
[self addChild: [OFXMLElement elementWithName: @"priority"
namespace: XMPP_NS_CLIENT
stringValue: priority_s]];
old = _priority;
_priority = [priority copy];
[old release];
|
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
if (object == self)
return OF_ORDERED_SAME;
if (![(id)object isKindOfClass: [XMPPPresence class]])
@throw [OFInvalidArgumentException exception];
otherPresence = (XMPPPresence *)object;
otherPriority = [otherPresence priority];
if (otherPriority == nil)
otherPriority = [OFNumber numberWithInt8: 0];
if (_priority != nil)
priorityOrder = [_priority compare: otherPriority];
else
priorityOrder =
[[OFNumber numberWithInt8: 0] compare: otherPriority];
if (priorityOrder != OF_ORDERED_SAME)
return priorityOrder;
otherShow = [otherPresence show];
if ([_show isEqual: otherShow])
return OF_ORDERED_SAME;
if (show_to_int(_show) < show_to_int(otherShow))
return OF_ORDERED_ASCENDING;
return OF_ORDERED_DESCENDING;
}
@end
|
|
|
|
|
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
if (object == self)
return OF_ORDERED_SAME;
if (![(id)object isKindOfClass: [XMPPPresence class]])
@throw [OFInvalidArgumentException exception];
otherPresence = (XMPPPresence *)object;
otherPriority = otherPresence.priority;
if (otherPriority == nil)
otherPriority = [OFNumber numberWithInt8: 0];
if (_priority != nil)
priorityOrder = [_priority compare: otherPriority];
else
priorityOrder =
[[OFNumber numberWithInt8: 0] compare: otherPriority];
if (priorityOrder != OF_ORDERED_SAME)
return priorityOrder;
otherShow = otherPresence.show;
if ([_show isEqual: otherShow])
return OF_ORDERED_SAME;
if (showToInt(_show) < showToInt(otherShow))
return OF_ORDERED_ASCENDING;
return OF_ORDERED_DESCENDING;
}
@end
|