@@ -17,7 +17,7 @@ import std.conv : ConvException, text, to;
1717import std.datetime : Clock , days, Duration, minutes, MonoTime, seconds,
1818 SysTime;
1919import std.stdio : writeln;
20- import std.string : join, split;
20+ import std.string : join, replace, split;
2121
2222final class CommandHandler
2323{
@@ -636,39 +636,70 @@ final class CommandHandler
636636
637637 private string user_export (string username)
638638 {
639+ enum quot = " \" " ;
640+ enum d_quot = " \"\" " ;
641+ enum j_quot = " \" , \" " ;
642+
639643 auto user = server.get_user(username);
640644 const status = (user.status == UserStatus.away) ? " away" : " online" ;
641- auto obfuscation_type = " null" ;
642- const joined_rooms = user.joined_room_names! (RoomType.any);
643- const accept_invitations = (
644- user.accept_room_invitations ? " true" : " false"
645- );
646- const joined_global_room = (
647- server.is_global_room_joined(username) ? " true" : " false"
648- );
645+
649646 const admin_until = server.db.admin_until(username);
650647 auto admin = (admin_until > SysTime())
651- ? text(" \" " , admin_until.toISOExtString, " \" " )
648+ ? text(quot , admin_until.toISOExtString, quot )
652649 : " null" ;
650+
653651 const privileged_until = user.privileged_until;
654652 auto privileged = (privileged_until > SysTime())
655- ? text(" \" " , privileged_until.toISOExtString, " \" " )
653+ ? text(quot , privileged_until.toISOExtString, quot )
656654 : " null" ;
655+
656+ const accept_invitations = (
657+ user.accept_room_invitations ? " true" : " false"
658+ );
659+ const joined_global_room = (
660+ server.is_global_room_joined(username) ? " true" : " false"
661+ );
657662 const supporter = user.supporter ? " true" : " false" ;
658663 const searchable = (
659664 server.is_user_unsearchable(username) ? " false" : " true"
660665 );
661- const private_rooms_owner = server.db.rooms(username);
662- const private_rooms_member = server.db.rooms(null , username);
663- const private_rooms_op = server.db.rooms(
664- null , username, RoomMemberType.operator
665- );
666666
667+ const liked_items = text(
668+ quot, user.liked_item_names.join(j_quot), quot
669+ ).replace(d_quot, " " );
670+
671+ const hated_items = text(
672+ quot, user.hated_item_names.join(j_quot), quot
673+ ).replace(d_quot, " " );
674+
675+ const joined_rooms = text(
676+ quot, user.joined_room_names! (RoomType.any).join(j_quot), quot
677+ ).replace(d_quot, " " );
678+
679+ const watched_users = text(
680+ quot, user.watched_usernames.join(j_quot), quot
681+ ).replace(d_quot, " " );
682+
683+ const rooms_owner = text(
684+ quot, server.db.rooms(username).join(j_quot), quot
685+ ).replace(d_quot, " " );
686+
687+ const rooms_member = text(
688+ quot, server.db.rooms(null , username).join(j_quot), quot
689+ ).replace(d_quot, " " );
690+
691+ const rooms_operator = text(
692+ quot, server.db.rooms(null , username, RoomMemberType.operator)
693+ .join(j_quot), quot
694+ ).replace(d_quot, " " );
695+
696+ auto obfuscation_type = " null" ;
667697 if (user.obfuscation_type == ObfuscationType.rotated)
668- obfuscation_type = " \" rotated\" " ;
698+ obfuscation_type = text(quot, " rotated" , quot);
699+
669700 else if (user.obfuscation_type != ObfuscationType.none)
670701 obfuscation_type = text(
671- " \" " , (cast (uint ) user.obfuscation_type).text, " \" "
702+ quot , (cast (uint ) user.obfuscation_type).text, quot
672703 );
673704
674705 Appender! string output;
@@ -684,10 +715,10 @@ final class CommandHandler
684715 " \n \" obfuscation_type\" : " , obfuscation_type, " ," ,
685716 " \n \" accept_room_invitations\" : " , accept_invitations, " ," ,
686717 " \n \" joined_global_room\" : " , joined_global_room, " ," ,
687- " \n \" liked_items\" : " , user.liked_item_names , " ," ,
688- " \n \" hated_items\" : " , user.hated_item_names , " ," ,
689- " \n \" joined_rooms\" : " , joined_rooms, " ," ,
690- " \n \" watched_users\" : " , user.watched_usernames ,
718+ " \n \" liked_items\" : [ " , liked_items , " ] ," ,
719+ " \n \" hated_items\" : [ " , hated_items , " ] ," ,
720+ " \n \" joined_rooms\" : [ " , joined_rooms, " ] ," ,
721+ " \n \" watched_users\" : [ " , watched_users, " ] " ,
691722 " \n }," ,
692723 " \n \" persistent_data\" : {" ,
693724 " \n \" admin_until\" : " , admin, " ," ,
@@ -697,9 +728,9 @@ final class CommandHandler
697728 " \n \" num_files\" : " , user.shared_files, " ," ,
698729 " \n \" num_folders\" : " , user.shared_folders, " ," ,
699730 " \n \" upload_speed\" : " , user.upload_speed, " ," ,
700- " \n \" private_rooms_owner\" : " , private_rooms_owner , " ," ,
701- " \n \" private_rooms_member\" : " , private_rooms_member , " ," ,
702- " \n \" private_rooms_operator\" : " , private_rooms_op , " ," ,
731+ " \n \" private_rooms_owner\" : [ " , rooms_owner , " ] ," ,
732+ " \n \" private_rooms_member\" : [ " , rooms_member , " ] ," ,
733+ " \n \" private_rooms_operator\" : [ " , rooms_operator , " ] ," ,
703734 " \n \" room_tickers\" : {" ,
704735 );
705736
@@ -718,7 +749,7 @@ final class CommandHandler
718749 }
719750
720751 output ~= text(
721- " }, " ,
752+ " }" ,
722753 " \n }," ,
723754 " \n \" volatile_data\" : {" ,
724755 " \n \" private_messages_queued\" : [" ,
@@ -736,8 +767,8 @@ final class CommandHandler
736767 if (! first) output ~= " ," ;
737768 output ~= text(
738769 " \n {" ,
739- " \n \" id\" : \" " , id, " \" " ,
740- " \n \" recipient\" : \" " , to_username, " \" " ,
770+ " \n \" id\" : " , id, " , " ,
771+ " \n \" recipient\" : \" " , to_username, " \" , " ,
741772 " \n \" timestamp\" : \" " , timestamp, " \" ," ,
742773 " \n \" message\" : \" " , message, " \" " ,
743774 " \n }"
0 commit comments