39 lines
1.1 KiB
Dart
39 lines
1.1 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:http/http.dart' as http;
|
|
|
|
import '../../../api_params.dart';
|
|
import '../../nextcloud_ocs.dart';
|
|
import '../get_poll/get_poll_state_response.dart';
|
|
import '../talk_api.dart';
|
|
import 'vote_poll_params.dart';
|
|
|
|
class VotePoll extends TalkApi<GetPollStateResponse> {
|
|
// Body als echtes JSON (nicht form-encoded wie die anderen Endpunkte): nur
|
|
// so kommt das int-Array an; sonst liest der Server optionIds als [] und
|
|
// löscht die eigene Stimme (Ursache des Readonly-Fallbacks, Issue #42).
|
|
VotePoll({
|
|
required String token,
|
|
required int pollId,
|
|
required VotePollParams params,
|
|
}) : super(
|
|
'v1/poll/$token/$pollId',
|
|
params,
|
|
headers: {'Content-Type': 'application/json'},
|
|
);
|
|
|
|
@override
|
|
GetPollStateResponse assemble(String raw) =>
|
|
GetPollStateResponse.fromJson(NextcloudOcs.decode(raw));
|
|
|
|
@override
|
|
Future<http.Response>? request(
|
|
Uri uri,
|
|
ApiParams? body,
|
|
Map<String, String>? headers,
|
|
) {
|
|
if (body is! VotePollParams) return null;
|
|
return http.post(uri, headers: headers, body: jsonEncode(body.toJson()));
|
|
}
|
|
}
|