From bf99e669fd3bb378e8a7fb28fbe4a57d12c64d21 Mon Sep 17 00:00:00 2001 From: Lyndon Jetten Date: Thu, 18 Nov 2021 12:33:13 +0100 Subject: [PATCH] NullPointerException abgefangen --- ChatController/ChatMainControl.xaml.cs | 117 ++++++++++++++----------- ChatController/HauptKlassen/Chat.cs | 9 +- ChatController/LoginControl.xaml.cs | 5 -- PrototypChat/.vs/PrototypChat/v16/.suo | Bin 288256 -> 286720 bytes 4 files changed, 74 insertions(+), 57 deletions(-) diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs index 7068509..f7a4694 100644 --- a/ChatController/ChatMainControl.xaml.cs +++ b/ChatController/ChatMainControl.xaml.cs @@ -322,64 +322,83 @@ namespace ChatController private void SelectContact(Contact pContact) { - if(pContact == null) + try { - return; - } - - ShouldInterruptContactsThread = true; - - StartWaitingImmediately(); - - _ScrollPrueferAktivieren = false; - - if (pContact.HasUnreadMessages) - { - pContact.HasUnreadMessages = false; - - Clientlist.Items.Refresh(); - } - - var currentContact = pContact; - pContact.IsNewMessage = false; - - var shouldChangeIcon = _ContactList.Any(contact => contact.IsNewMessage); - if(shouldChangeIcon) - { - ContainingWindow.Icon = Utils.ConvertIconToImageSource(Resource.ownchat_favicon); - } - - CurrentContact = currentContact; - - if(Clientlist.Items.Contains(pContact)) - { - Clientlist.SelectedItem = pContact; - } - - _ChatMessages.Clear(); - - Chat.LoadChatMessagesForContactAsync(currentContact, GetFirstMessage(), chatMessages => - { - this.Dispatch(() => + if (pContact == null) { - _ChatMessages.AddRangeIfElementsNotIn(chatMessages); + return; + } - WpfUtils.ScrollToBottomOfListBox(ChatListBox); + ShouldInterruptContactsThread = true; - ChatListBox.ContextMenu = Chat.ErstelleKontextMenue(); - SetContextHandler(); - _ScrollPrueferAktivieren = true; + StartWaitingImmediately(); - ListenForMessages(); - Cursor = Cursors.Arrow; + _ScrollPrueferAktivieren = false; - WriteToNewSyncFile(); + if (pContact.HasUnreadMessages) + { + pContact.HasUnreadMessages = false; - ShouldInterruptContactsThread = false; + Clientlist.Items.Refresh(); + } - EndWaiting(); + var currentContact = pContact; + pContact.IsNewMessage = false; + + var shouldChangeIcon = _ContactList.Any(contact => contact.IsNewMessage); + if (shouldChangeIcon) + { + ContainingWindow.Icon = Utils.ConvertIconToImageSource(Resource.ownchat_favicon); + } + + CurrentContact = currentContact; + + if (Clientlist.Items.Contains(pContact)) + { + Clientlist.SelectedItem = pContact; + } + + _ChatMessages.Clear(); + + Chat.LoadChatMessagesForContactAsync(currentContact, GetFirstMessage(), chatMessages => + { + this.Dispatch(() => + { + _ChatMessages.AddRangeIfElementsNotIn(chatMessages); + + WpfUtils.ScrollToBottomOfListBox(ChatListBox); + + ChatListBox.ContextMenu = Chat.ErstelleKontextMenue(); + SetContextHandler(); + _ScrollPrueferAktivieren = true; + + ListenForMessages(); + Cursor = Cursors.Arrow; + + WriteToNewSyncFile(); + + ShouldInterruptContactsThread = false; + + EndWaiting(); + }); }); - }); + } + catch(Exception exception) + { +#if DEBUG + var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); + + using(var fileStream = new FileStream(Path.Combine(desktop, "ownchat_log.txt"), FileMode.OpenOrCreate)) + { + using(var streamWriter = new StreamWriter(fileStream)) + { + streamWriter.WriteLine(exception.ToString()); + } + } +#endif + + MessageBox.Show(exception.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); + } } private void SetContextHandler() diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs index 0b8ba4e..f3527ac 100644 --- a/ChatController/HauptKlassen/Chat.cs +++ b/ChatController/HauptKlassen/Chat.cs @@ -255,7 +255,7 @@ namespace ChatController.HauptKlassen { var messageCounter = JsonConvert.DeserializeObject(response.Content); - callback?.Invoke(messageCounter.MessageCount); + callback?.Invoke(messageCounter?.MessageCount ?? 0); }); } catch(Exception exception) @@ -1028,8 +1028,11 @@ namespace ChatController.HauptKlassen try { _Contacts.Clear(); - - _Contacts.AddRange(GenerateContactsFromServerResponse(chatDaten.Response.Groups.ToArray())); + + if(chatDaten?.Response != null) + { + _Contacts.AddRange(GenerateContactsFromServerResponse(chatDaten.Response.Groups.ToArray())); + } return _Contacts; } diff --git a/ChatController/LoginControl.xaml.cs b/ChatController/LoginControl.xaml.cs index 2342200..8d0d4de 100644 --- a/ChatController/LoginControl.xaml.cs +++ b/ChatController/LoginControl.xaml.cs @@ -101,11 +101,6 @@ namespace ChatController //_ChatCode = "K2UPV-qrirb"; //_Benutzername = "lyndon"; //Password = "lyndon2travemünde"; - - _Kundennummer = "4368658436"; - _ChatCode = "B7x0b-FhhJA"; - _Benutzername = "jettenl"; - Password = "n8-yR+3Q=6nX#"; #endif } diff --git a/PrototypChat/.vs/PrototypChat/v16/.suo b/PrototypChat/.vs/PrototypChat/v16/.suo index e1984218a243ca5b13bf2db1937308b2f5701833..ca1b2d1e93386c7583ad6835b4c26caf41b03a1d 100644 GIT binary patch delta 12274 zcmeHN30PIvwLWW~3tr|yL=;g3L{wBzMn$+FqCrG3M2(^XDr!VQfke~@is0BNY{Sl| zh%Jt35b`+2SaVHGYyA?33@^So1d}FdF!ia`M2*q+?|Ux_hP0+h-)sANzVAP4&%@fo zT6^tX^0rHf(Pd*$f2HMfR+LU~>ww#L?%a{V1lRzFfp8##FYwLXn-@ZrEQzM^o~(y$ zlh?%+{Php%w!$B0x2*z^>RVoJVlp_2WQ^U-WarkA5s(04wc!6&ekM}WDHV&${X+jpE&V`|u!UYxO!8?bm<^Ykvs zMX%j-{8abGXRB-1ESjI4{^;r}%|6F@Y(F=zVFpF{(B;q_+&KR*3s>Svo84C@aQ*9DH!bpi_; zQUdF!W*MuAW{t1V5#mRt1=>A}K3WF2;Z7{E%BaA$P@v3 z1S_Zl>GoiM+JJofAul?^AL^wjMk__xj=iQ3`R4Xjlt~EhhpmLtYLZ!Hdb}hj zZ3XE>9eLrDbv5I3m4@NNjt+#tLC$b&k>`+eC3db=V99SHATF^J9(hPnUPO&+u*vj7 zcu1MFjDpzi#?b6xnaA9k*ZrONT~dbvS&mvv)Ckv%UQ zpKN1dz&uNsl@9go;y1<@la3cnNEC1OqCs-YkdR*nC;ylR!z3eBW{lFwO~h1G2VR&_ z%x)_D>x?lrG#bI+f;nm(FU%~qJ&SV3fD;J3Jui;3dF=cpl*7HseReWh{X2Umjwgh}?3^lG~iP96`Osmi^43!BAqLs&Zzi zdWm)C_GQ7mTe%+!b*RZ=m7ds5JiN$;%8(}?kgeqfUDi{c>}oBV|_ow@VHWsbI)^Ku4E&o8Ap3Qv5xv1Ycea>zBi zWAj{2eOgfZ-j|=G)eJ?6p=wX9XN1~=DuX<^lW^d>4IX{Qxn|t_vscZ>wy%G+N|g4r z|K{2SRd%M${Cg7fMr@5#I}2B5)j+Fwg_~#bYOrn%uohSctOtGpJOyk3HUe@VsRZS~ zCg5qH3J}0Ez_Y+}!1KThz>9#)vjy}$U@K4qYy*A;YzAt9?F6yA1CE`*E`aY?kz{)i z4w>6X{PqeTtKY+Wl=mw2O_hP~!}kI3pTLK}DZsEc?0?q@U0G|SX z06qgg2d;nt1No8C{uP-WT~$nV>|Kf#s5Q`m@vcuT?j`H2wUjF-7`&!$sKq@1N#mq) zS&?_D($S~EXX?8|&o*2uw6m`1O9pF2$;?IzQQM2Nu>)Y;Eyn7M!bn_LpeSD<_nabV zB}jLmSW&KFAvCXt8|g1Sr6{i4(9gh^8~Ta^L&-_pn5G+9xq6gtI4YM@t)XCb3hAZ5 zky?lhsnY3WS@JWjgz5haD?yZuAiw|cW4|Pw90A!3pO@gcBU>TAMD%JXdgS1Uo}tGn zp!2!)+I|hOYhR~-y?JOrpXDTp2mMj=(9S%!O#jN2M!w>BckaE+hrd%kmalI0p=hodZ|5m&lw*Zz};~h!C_lPIr|(IB)I&>i&)H{&sLik=l&W+*$1if z#cs?&NTJsn6eR)seA+%NMt-Q57oRe7+XK|vouAugPqVOd`S6l*gSZ%=M(CrITqRGL zsqm9!F%-lNn+)8r%IL04#@dui<#SM}0sjeV^z*{;jOttbSs>Otf+ph>bQ$faLAulM zzl(I^L6;6QZ!kGAXg8$e!g1J0(C+jpit@L}a+*iYbp zAL7*k{zyn41N<+6eu0^HYAFt4gi}BQ)Vf)SAS}G0C}_h9ML}MrPpSC?mxqNFjm2cW z4)O*Kd~$=LEJ6HlDnL>2Qyk|?_^*J@M*a^Ww~Mi`i^2E>Xy~M0Da!AVZs&F^bkMKS zs`rq700v;TJe^*E1JXunMg}QPov@t;(>_jqF%K$0=KUoB!r$5E^4Q$=F=SvAz8 zpNahQ>J(nL+}34qL`Y!pV6&)_;%cTi6h@uePi&H{`Y>~1bHe)g5;7>YdlcnObbAx_ z1Svpnyo}Wk|Nc7jxD42fv4_7`J>o%cf=&Qk-hiD0LBh z@lDV~Y{Ol-A;hT1VB{RYN|%U8+vo~o?f)@TIOoL=B`5FodBQSd6Qq{qaKS7{0P zh{FAJhrC7MYgBC214;D!#v@C}UKCzJ02bKy)IROnWwK+n^~AK2C6uJojxA6hH*r3? z@hYmfmm&?T&h)kA_gH;5gvwfEL(I&t#VJpWn@2MQ$}ta{hGC0W_hxRPioDFqyaKBL z%)TEyS5;=j>*dDVp3<4j53?XLshW28R82)oT|ga3yj@H;t8P)eel%L-WocDIK|~tq z{4G9l^*c&yEw;zv2s(1uE9?mAu*;bGpBFQ|l%;C%WwfG0qcyW* zx`^Qk!!;*88%BOdT{rG@S=FW1@Qruei@(onyh2N#v}*ENvt!HF7r)*1AtqYIaZ2S*(T?JTj`URy%*c|1dG`~I+9F4`ns|w`kLIIe=Sce` z1CvpB7paxPwKEIU0-c#PQwL+4OFhjx`91(&@p)c$h_kKlRR2l1o3x;wN^HnJsIU+xv{ z#!GhV+C(R}M7!}TyJ0su<=har$Ir>62WftObcQ(F@6E5jme_FOwVM(ZhX(1XKFrEYd14ie=(bClZkP|%N~5$f3FZFooFKe>ht%-33qbl z-EVc{FI?Q$;C$c z^6>23CmznrnNv_ObD^_0m;kY)=t17isgY4co{!X->2yudfX|7}IoYv7| z?-1%DcrXo=g*%Aj!Q}3V)OMq{_l%L*OyxQIq9|E|O;s30y2#)+uLU69QlFL>M$M|Z zd4?hPH&3p2bMq|4*+9@MHjwhj-ck;ZRDT{qk)G!EXUhb$S|yO}*G3MdA~O@1b*{PP zUqsQsw#*oST&AWjl-WtK$u|{)UyR<)<+10o0{w(wE)YzCvMyg6y_2S5AiV%j`lm_FEPL#~Xo^SeP zJcnU?dp51*SvUH2Ak!pP#K<`msbXIgrE_Q)5lq<~#rtz8@F$2ImtSIiv{F6qSaBD( zVuxM`^#^(b#W*UJTDhWsLFU8GY^xFk|Faz-&BoEBQjbtibmcU9Ag$-Ofgh!(t6-M6 zzLRd5klt`{xD4&a8LgMJvp63@V}$o9>Ml~= zrLLGdhmvTk*m#^4n-WTCCKGnzC(rlm*~*mAuEAibaCw&=77IPekAlVC8E_}`hH!5w z-^~=I1}g!YO9uU(_=)BMk+EL27X=&DPqcAo$Q?~xuj;I1z2n7#voz5Adse#ptYn(; zEE!dY980$(brB0r(|Jmeow*>qC#!wiM$67TP`PibG@Pei=tt#Z`3E#&gcK-wN)e9B zxez3eL5N7Hefk38P=LAUJgwMvwn$C@5);_YASX11vXJ=$-< z-CD)ouGqmJEUkGA%ws*8nQiWpc9K2TKKg<}sNV6g+!D2TRwsGzXJm=!ucH`)ffcn5yzL;Lmy=0O%=qg;fsT68m=V1Grew3~|t zNGXX=oIFJN<~mnkOkr|SBy})N|7E5!V;{y8mg<(A^l~D~X`X5F1>EPCOQLNGIrTfp zssCs#W9;YGMFn)xM|jhvQSJ5NLHJf<>Z9jh=%c`7=q=W|tB&H5j&ydd7$Dc(h$>rV z{GKxG@C4WtEjf(uC)FX>>sI2;b%9#bNLEg@7k`wNyj7t($ zulXBbl)9FKD4D^Q$tId=i_*Mn)f+mkIg43!6p2jdBixc$peRXVZXyjX*o$M6pd4<3 zyJ`&UBtA$&rwwD6ksCkKYx>8Ts|~#^Jd4?QDiGDn(AS_RSc0fKN!FsNm`!Rhgq7U8 z3e=3tu{tzkDgLeRL+I`uhV6DkIU{adX%L20%xEVsWICb;CjPHwi^c6-Xif|37mKmA z=*fvmxKF}JERnH8CEFJZ!#HMT;=6_jPpVy}>V)^x=mGj3C&2v)B5wmm3+c96To=?K z8V2NmmE?Zgy1@8JGSxJ3XA;v>xV+o(6;lOsYvrEsgCog zk+~N9&-sTGy)S^*{b?U}zNHsN4{~m>{VttBG%=V5`l<)*#2ZJLH)qEa zwYsw`!&StlFn3{`$WEA7O|JPM8~*QuEVQ%b{RrZ5&QYw?Dv%`M14kh)5Z)y7Tpy@dRk=U56&ek$Q zpdw>ps@0l(67_{Wb`cI>IJ{T7SJlumVXUU><}jSks;&Rpp-dKk|6yr^>P~HsH7%ze znOZo1N+o}f!;7hK)A{iGXNFysY5-NmQjNpkQH4YUiuj?jj(9s@C7KGDr#QBc#fxtX z*!FvJJu)~XD|7Jltp1VH!z25LgoXz7j|dM6>K{BPI5;9=aCUZRNbokmO?-<0sO-Zi`DZMJ@EsFb%Y7CKx>D)&9* z$PtFKDjv=R;o*$IV89HM?}5^=YyM5IeSYATPh*T)0*$=o9hW#5tES>{i`1uh-ynC& z(Mr;FCCuPpc`Ss6{!Nb`zW3G)N6cD!2eBs=o z(tP1O7gSz2r&O6QoUcD`x^QlLk6gJdi&vL>o37{i;wl)xTJCpwzL@I}J~$*Ww9Rd; zsMx746i{OQM8;S)R6F)dwzQLmgGB?ieiiV4p>=kZ)_VCiw*5ys!7Yz;ypXI9MzAl? n50J}7KDCvPbQ0hW0v!W-dvE4Y`e9Wz{@*M4A7>>$q8k4Pvst{H delta 13072 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