2020* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2121*/
2222
23+ use std:: ops:: Index ;
2324use std:: str:: FromStr ;
2425use std:: { collections:: HashMap , path:: Path } ;
2526use tell:: { Tell , TellLevel } ;
@@ -29,8 +30,8 @@ use indicatif::{ProgressBar, ProgressState, ProgressStyle};
2930
3031use crate :: playeractivitiessummary:: PlayerActivitiesSummary ;
3132use crate :: utils:: {
32- format_error, COMPETITIVE_PVP_ACTIVITY_HASH ,
33- FREELANCE_COMPETITIVE_PVP_ACTIVITY_HASH ,
33+ format_error, CHECKMATE_CONTROL_ACTIVITY_HASH ,
34+ COMPETITIVE_PVP_ACTIVITY_HASH , FREELANCE_COMPETITIVE_PVP_ACTIVITY_HASH ,
3435} ;
3536use crate :: {
3637 crucible:: { CrucibleActivity , Member , PlayerName , Team } ,
@@ -817,7 +818,26 @@ impl ActivityStoreInterface {
817818 }
818819 }
819820
820- fn add_mode (
821+ fn remove_from_modes (
822+ & self ,
823+ activity : & mut DestinyPostGameCarnageReportData ,
824+ mode : Mode ,
825+ ) {
826+ let o: Option < usize > = activity
827+ . activity_details
828+ . modes
829+ . iter ( )
830+ . position ( |m| m == & mode) ;
831+
832+ if o. is_none ( ) {
833+ return ;
834+ }
835+
836+ let index: usize = o. unwrap ( ) ;
837+ activity. activity_details . modes . remove ( index) ;
838+ }
839+
840+ fn set_mode (
821841 & self ,
822842 activity : & mut DestinyPostGameCarnageReportData ,
823843 mode : Mode ,
@@ -850,53 +870,53 @@ impl ActivityStoreInterface {
850870
851871 match activity. activity_details . director_activity_hash {
852872 4242525388 | 559852413 => {
853- self . add_mode ( activity, Mode :: PrivateMatchesClash ) ;
873+ self . set_mode ( activity, Mode :: PrivateMatchesClash ) ;
854874 self . add_to_modes ( activity, Mode :: Clash ) ;
855875 }
856876 1859507212 | 3959500077 => {
857- self . add_mode ( activity, Mode :: PrivateMatchesControl ) ;
877+ self . set_mode ( activity, Mode :: PrivateMatchesControl ) ;
858878 self . add_to_modes ( activity, Mode :: Control ) ;
859879 }
860880 2491884566 | 3076038389 => {
861- self . add_mode ( activity, Mode :: PrivateMatchesRumble ) ;
881+ self . set_mode ( activity, Mode :: PrivateMatchesRumble ) ;
862882 self . add_to_modes ( activity, Mode :: Rumble ) ;
863883 }
864884 29726492 | 1543557109 => {
865- self . add_mode ( activity, Mode :: PrivateMatchesMayhem ) ;
885+ self . set_mode ( activity, Mode :: PrivateMatchesMayhem ) ;
866886 self . add_to_modes ( activity, Mode :: AllMayhem ) ;
867887 }
868888 2143799792 | 2903879783 => {
869- self . add_mode ( activity, Mode :: PrivateMatchesSurvival ) ;
889+ self . set_mode ( activity, Mode :: PrivateMatchesSurvival ) ;
870890 self . add_to_modes ( activity, Mode :: Survival ) ;
871891 }
872892 2923123473 => {
873- self . add_mode ( activity, Mode :: Elimination ) ;
893+ self . set_mode ( activity, Mode :: Elimination ) ;
874894 }
875895 3530889940 => {
876- self . add_mode ( activity, Mode :: Momentum ) ;
896+ self . set_mode ( activity, Mode :: Momentum ) ;
877897 }
878898 84526555 => {
879- self . add_mode ( activity, Mode :: ScorchedTeam ) ;
899+ self . set_mode ( activity, Mode :: ScorchedTeam ) ;
880900 self . add_to_modes ( activity, Mode :: Scorched ) ;
881901 }
882902 3344441646 => {
883- self . add_mode ( activity, Mode :: Scorched ) ;
903+ self . set_mode ( activity, Mode :: Scorched ) ;
884904 }
885905 1887396202 => {
886- self . add_mode ( activity, Mode :: Showdown ) ;
906+ self . set_mode ( activity, Mode :: Showdown ) ;
887907 }
888908 1978116819 => {
889- self . add_mode ( activity, Mode :: Rift ) ;
909+ self . set_mode ( activity, Mode :: Rift ) ;
890910 }
891911 2404525917 => {
892- self . add_mode ( activity, Mode :: Breakthrough ) ;
912+ self . set_mode ( activity, Mode :: Breakthrough ) ;
893913 }
894914 1218001922 => {
895- self . add_mode ( activity, Mode :: PrivateMatchesSupremacy ) ;
915+ self . set_mode ( activity, Mode :: PrivateMatchesSupremacy ) ;
896916 self . add_to_modes ( activity, Mode :: Supremacy ) ;
897917 }
898918 3767360267 => {
899- self . add_mode ( activity, Mode :: PrivateMatchesCountdown ) ;
919+ self . set_mode ( activity, Mode :: PrivateMatchesCountdown ) ;
900920 self . add_to_modes ( activity, Mode :: Countdown ) ;
901921 }
902922 _ => was_updated = false ,
@@ -919,15 +939,15 @@ impl ActivityStoreInterface {
919939 if activity. activity_details . mode == Mode :: None {
920940 match activity. activity_details . director_activity_hash {
921941 2259621230 => {
922- self . add_mode ( activity, Mode :: Rumble ) ;
942+ self . set_mode ( activity, Mode :: Rumble ) ;
923943 was_updated = true ;
924944 }
925945 903584917 | 3847433434 => {
926- self . add_mode ( activity, Mode :: AllMayhem ) ;
946+ self . set_mode ( activity, Mode :: AllMayhem ) ;
927947 was_updated = true ;
928948 }
929949 1113451448 => {
930- self . add_mode ( activity, Mode :: Rift ) ;
950+ self . set_mode ( activity, Mode :: Rift ) ;
931951 was_updated = true ;
932952 }
933953 _ => ( ) ,
@@ -943,24 +963,38 @@ impl ActivityStoreInterface {
943963 == FREELANCE_COMPETITIVE_PVP_ACTIVITY_HASH
944964 {
945965 if activity. activity_details . mode == Mode :: Rift {
946- self . add_mode ( activity, Mode :: RiftCompetitive ) ;
966+ self . set_mode ( activity, Mode :: RiftCompetitive ) ;
947967 self . add_to_modes ( activity, Mode :: RiftCompetitive ) ;
948968 was_updated = true ;
949969 }
950970
951971 if activity. activity_details . mode == Mode :: Showdown {
952- self . add_mode ( activity, Mode :: ShowdownCompetitive ) ;
972+ self . set_mode ( activity, Mode :: ShowdownCompetitive ) ;
953973 self . add_to_modes ( activity, Mode :: ShowdownCompetitive ) ;
954974 was_updated = true ;
955975 }
956976
957977 if activity. activity_details . mode == Mode :: Survival {
958- self . add_mode ( activity, Mode :: SurvivalCompetitive ) ;
978+ self . set_mode ( activity, Mode :: SurvivalCompetitive ) ;
959979 self . add_to_modes ( activity, Mode :: SurvivalCompetitive ) ;
960980 was_updated = true ;
961981 }
962982 }
963983
984+ //add support for checkmate (adding modes)
985+
986+ if activity. activity_details . director_activity_hash
987+ == CHECKMATE_CONTROL_ACTIVITY_HASH
988+ {
989+ self . set_mode ( activity, Mode :: CheckmateControl ) ;
990+
991+ self . add_to_modes ( activity, Mode :: CheckmateAll ) ;
992+ self . add_to_modes ( activity, Mode :: CheckmateControl ) ;
993+
994+ self . remove_from_modes ( activity, Mode :: PvPQuickplay ) ;
995+ self . remove_from_modes ( activity, Mode :: ControlQuickplay ) ;
996+ }
997+
964998 if activity. activity_details . mode == Mode :: PrivateMatchesAll {
965999 was_updated = self . fix_private_match ( activity) ;
9661000 }
0 commit comments