2015-07-06 14:29:34 +00:00
using System ; //Copyright (c) NorbiPeti 2015 - See LICENSE file
2014-04-25 21:55:43 +00:00
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.IO ;
2014-10-24 17:02:38 +00:00
using System.Windows.Forms ;
using Khendys.Controls ;
using SzNPProjects ;
using System.Net ;
2015-07-06 11:04:54 +00:00
using System.Drawing ;
using FastColoredTextBoxNS ;
using System.Text.RegularExpressions ;
2014-04-25 21:55:43 +00:00
namespace MSGer.tk
{
2015-08-23 17:05:03 +00:00
public partial class UserInfo : IDisposable
2014-04-25 21:55:43 +00:00
{
/ *
* 2014.03 . 07.
* Az ö sszes szükséges felhasználó szükséges adatai
* /
2014-10-24 17:02:38 +00:00
public static List < UserInfo > KnownUsers = new List < UserInfo > ( ) ; //2014.08.28.
public int UserID //Az egész rendszerben egyedi azonosítója
{
get ;
set ;
}
public int ListID //A listabeli azonosítója
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_listid" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_listid" , "-1" ) ;
return Int32 . Parse ( Storage . LoggedInSettings [ "userinfo_" + UserID + "_listid" ] ) ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_listid" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_listid" , "-1" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_listid" ] = value . ToString ( ) ;
}
}
2015-03-26 19:36:18 +00:00
public int TMPListID { get ; set ; } //2014.12.05.
2014-04-25 21:55:43 +00:00
public string Name
{
get
{
2014-10-24 17:02:38 +00:00
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_name" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_name" , "" ) ;
return Storage . LoggedInSettings [ "userinfo_" + UserID + "_name" ] ;
2014-04-25 21:55:43 +00:00
}
set
{
2014-10-24 17:02:38 +00:00
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_name" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_name" , "" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_name" ] = value ;
Update ( ) ;
2014-04-25 21:55:43 +00:00
}
}
public string Message
{
get
{
2014-10-24 17:02:38 +00:00
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_message" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_message" , "" ) ;
return Storage . LoggedInSettings [ "userinfo_" + UserID + "_message" ] ;
2014-04-25 21:55:43 +00:00
}
set
{
2014-10-24 17:02:38 +00:00
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_message" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_message" , "" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_message" ] = value ;
Update ( ) ;
2014-04-25 21:55:43 +00:00
}
}
2014-10-24 17:02:38 +00:00
public int State
2014-04-25 21:55:43 +00:00
{
get
{
2014-10-24 17:02:38 +00:00
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_state" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_state" , "-1" ) ;
return Int32 . Parse ( Storage . LoggedInSettings [ "userinfo_" + UserID + "_state" ] ) ;
2014-04-25 21:55:43 +00:00
}
set
{
2014-10-24 17:02:38 +00:00
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_state" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_state" , "-1" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_state" ] = value . ToString ( ) ;
Update ( ) ;
}
}
public string UserName
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_username" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_username" , "" ) ;
return Storage . LoggedInSettings [ "userinfo_" + UserID + "_username" ] ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_username" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_username" , "" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_username" ] = value ;
Update ( ) ;
}
}
public string Email
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_email" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_email" , "" ) ;
return Storage . LoggedInSettings [ "userinfo_" + UserID + "_email" ] ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_email" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_email" , "" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_email" ] = value ;
Update ( ) ;
}
}
public bool IsPartner
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_ispartner" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_ispartner" , "False" ) ;
return bool . Parse ( Storage . LoggedInSettings [ "userinfo_" + UserID + "_ispartner" ] ) ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_ispartner" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_ispartner" , "False" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_ispartner" ] = value . ToString ( ) ;
Update ( ) ;
}
}
public int LastUpdate
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_lastupdate" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_lastupdate" , "0" ) ;
return Int32 . Parse ( Storage . LoggedInSettings [ "userinfo_" + UserID + "_lastupdate" ] ) ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_lastupdate" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_lastupdate" , "0" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_lastupdate" ] = value . ToString ( ) ;
Update ( ) ;
}
}
2015-03-26 19:36:18 +00:00
public string LoginCode //
2014-10-24 17:02:38 +00:00
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_logincode" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_logincode" , "0" ) ;
return Storage . LoggedInSettings [ "userinfo_" + UserID + "_logincode" ] ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_logincode" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_logincode" , "0" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_logincode" ] = value ;
Update ( ) ;
}
}
2015-07-06 11:04:54 +00:00
public double PicUpdateTime //int-->double: 2015.06.06.
2015-03-26 19:36:18 +00:00
{
get
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_picupdatetime" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_picupdatetime" , "0" ) ;
return Int32 . Parse ( Storage . LoggedInSettings [ "userinfo_" + UserID + "_picupdatetime" ] ) ;
}
set
{
if ( ! Storage . LoggedInSettings . ContainsKey ( "userinfo_" + UserID + "_picupdatetime" ) )
Storage . LoggedInSettings . Add ( "userinfo_" + UserID + "_picupdatetime" , "0" ) ;
Storage . LoggedInSettings [ "userinfo_" + UserID + "_picupdatetime" ] = value . ToString ( ) ;
Update ( ) ;
}
}
2015-07-06 11:04:54 +00:00
/// <summary>
/// Ha null, akkor NoImage--et jelenítsen meg
/// </summary>
public Image Image ; //2015.05.30.
2015-03-26 19:36:18 +00:00
2014-10-24 17:02:38 +00:00
private static HashSet < IPEndPoint > ips = new HashSet < IPEndPoint > ( ) ;
public static HashSet < IPEndPoint > IPs
{
get
{
return ips ;
}
set
{
ips = value ;
}
}
private static List < IPEndPoint > bannedips = new List < IPEndPoint > ( ) ;
public static List < IPEndPoint > BannedIPs
{
get
{
return bannedips ;
}
set
{
bannedips = value ;
2014-04-25 21:55:43 +00:00
}
}
2014-10-24 17:02:38 +00:00
public static int BanTime { get ; set ; }
2014-04-25 21:55:43 +00:00
public UserInfo ( )
{
2014-10-24 17:02:38 +00:00
}
2015-07-06 11:04:54 +00:00
public void GetImageFromNetwork ( int receivedupdate )
2015-03-26 19:36:18 +00:00
{ //Most már elvileg csak akkor hívja meg, amikor feldolgozza a kapott adatokat, tehát nem a Main Thread-ban
2015-07-06 11:04:54 +00:00
if ( this . PicUpdateTime > = receivedupdate )
{ //2015.06.06.
LoadImageFromFile ( ) ;
return ;
2015-03-26 19:36:18 +00:00
}
2014-10-24 17:02:38 +00:00
//2014.08.16. - A képeket azért nem menti felhasználónként, mert úgyis le tudja tölteni mindenkinek a képét szinte bárki, és amúgy is UserID-val van azonosítva
2015-07-06 11:04:54 +00:00
var pfs = new Networking . PacketSender (
new Networking . PDGetImage ( UserID , ( Image ! = null ? PicUpdateTime : 0 ) ) ) . Send ( ) ; //Image!=null: 2015.06.06.
if ( pfs = = null | | pfs . All ( entry = > ! ( ( Networking . PDGetImage ) entry . EData ) . RSuccess ) )
{
LoadImageFromFile ( ) ; //2015.06.06.
return ;
}
IEnumerable < double > picupdatetimes = pfs . Select ( entry = > ( ( Networking . PDGetImage ) entry . EData ) . RPicUpdateTime ) ;
byte [ ] bytes = null ;
double max = picupdatetimes . Max ( ) ; //2015.06.06.
foreach ( var entry in pfs )
{
if ( ( ( Networking . PDGetImage ) entry . EData ) . RPicUpdateTime = = max )
{
bytes = ( ( Networking . PDGetImage ) entry . EData ) . RImageData ;
break ;
}
}
2014-10-24 17:02:38 +00:00
2015-07-06 11:04:54 +00:00
if ( bytes = = null | | bytes [ 0 ] = = 0x00 ) //Nincs kép, vagy hiba történt
2014-04-25 21:55:43 +00:00
{
2015-07-06 11:04:54 +00:00
this . Image = null ; //2015.05.30.
2014-04-25 21:55:43 +00:00
}
2014-10-24 17:02:38 +00:00
else if ( bytes [ 0 ] = = 0x01 )
{
2015-07-06 11:04:54 +00:00
LoadImageFromFile ( ) ; //2015.06.06.
2014-10-24 17:02:38 +00:00
}
2014-04-25 21:55:43 +00:00
else
{ //Mentse el a képet
2015-07-06 11:04:54 +00:00
File . WriteAllBytes ( "pictures\\" + UserID + ".png" , bytes ) ; //2015.06.06. - Először a fogadott formátumban menti el, majd legközelebb már PNG-ként
LoadImageFromFile ( ) ; //2015.06.06.
2014-04-25 21:55:43 +00:00
}
}
public List < int > GetChatWindows ( )
{
List < int > retlist = new List < int > ( ) ;
2015-03-26 19:36:18 +00:00
for ( int x = 0 ; x < ChatPanel . ChatWindows . Count ; x + + )
2014-04-25 21:55:43 +00:00
{
2015-03-26 19:36:18 +00:00
if ( ChatPanel . ChatWindows [ x ] . ChatPartners . Any ( entry = > entry . UserID = = UserID ) )
2014-04-25 21:55:43 +00:00
{
retlist . Add ( x ) ;
}
}
return retlist ;
2014-10-24 17:02:38 +00:00
}
2015-07-06 11:04:54 +00:00
private void LoadImageFromFile ( )
{ //2015.06.06.
//2015.06.14.
if ( ! Directory . Exists ( "pictures" ) )
Directory . CreateDirectory ( "pictures" ) ;
string [ ] files = Directory . GetFiles ( "pictures" , UserID + ".*" ) ;
if ( files . Length > 0 )
this . Image = Program . LoadImageFromFile ( files [ 0 ] ) ;
else
this . Image = null ;
}
/// <summary>
/// Csak a megjelenítéshez, ellenőrzéshez null-check
/// </summary>
public static Image NoImage = Properties . Resources . noimage ; //2015.05.30.
2014-10-24 17:02:38 +00:00
public static void Load ( )
{
2015-07-06 11:04:54 +00:00
using ( var gr = Graphics . FromImage ( NoImage ) )
Theme . SkinThis ( typeof ( NoImage ) , gr ) ; //2015.07.03.
2014-10-24 17:02:38 +00:00
foreach ( var entry in Storage . LoggedInSettings )
{
2015-07-06 11:04:54 +00:00
try
{
string [ ] tmp = entry . Key . Split ( '_' ) ;
if ( tmp [ 0 ] ! = "userinfo" )
continue ;
var tmp2 = new UserInfo ( ) ;
tmp2 . UserID = Int32 . Parse ( tmp [ 1 ] ) ;
tmp2 . LoadImageFromFile ( ) ; //2015.06.14.
if ( ! IDIsInList ( KnownUsers , tmp2 . UserID ) )
KnownUsers . Add ( tmp2 ) ;
}
catch
{
}
2014-10-24 17:02:38 +00:00
}
}
public static bool IDIsInList ( List < UserInfo > list , int userid )
{
return ( list . Count ( entry = > entry . UserID = = userid ) > 0 ) ; //2014.09.19.
}
public static UserInfo Select ( int userid )
{
2015-07-06 11:04:54 +00:00
return KnownUsers . FirstOrDefault ( entry = > entry . UserID = = userid ) ; //Single-->FirstOrDefault: 2015.06.06.
2014-10-24 17:02:38 +00:00
}
public static int GetUserIDFromListID ( int ListID )
{
for ( int i = 0 ; i < UserInfo . KnownUsers . Count ; i + + )
{
2015-03-26 19:36:18 +00:00
if ( UserInfo . KnownUsers [ i ] . IsPartner & & UserInfo . KnownUsers [ i ] . TMPListID = = ListID ) //Ahol szükség van rá, ott az aktuális ListID szükséges, nem a beállított
2014-10-24 17:02:38 +00:00
return UserInfo . KnownUsers [ i ] . UserID ;
}
return 0 ;
}
public static bool AutoUpdate { get ; set ; }
private Timer UpdateTimer = new Timer ( ) ; //2014.09.26. - Csak másodpercenként frissíti az ismerőslistát
public void Update ( )
{
if ( ! IsPartner | | ! AutoUpdate )
return ;
if ( ! UpdateTimer . Enabled )
{
2015-07-06 11:04:54 +00:00
if ( UpdateTimer . Tag = = null | | ! ( bool ) UpdateTimer . Tag )
{
UpdateTimer . Interval = 500 ;
UpdateTimer . Tick + = UpdateTimerTick ;
UpdateTimer . Tag = true ;
}
if ( Program . MainF . InvokeRequired )
Program . MainF . Invoke ( new Action ( ( ) = > UpdateTimer . Start ( ) ) ) ;
else
UpdateTimer . Start ( ) ;
2014-10-24 17:02:38 +00:00
}
}
private void UpdateTimerTick ( object sender , EventArgs e )
{
UpdateTimer . Stop ( ) ;
if ( ListID = = - 1 )
{
int i ;
for ( i = 0 ; i < Program . MainF . contactList . Items . Count ; i + + )
{
if ( Program . MainF . contactList . Items [ i ] . SubItems [ 1 ] . Text = = "" )
{
break ;
}
}
ListID = i ;
}
2015-03-26 19:36:18 +00:00
CreateListItem ( Program . MainF . contactList , ListID ) ;
}
public void CreateListItem ( RichListView listView , int pos )
{
string state = "" ;
if ( this . State = = 1 )
2015-07-06 11:04:54 +00:00
state = " (" + Language . Translate ( Language . StringID . Menu_File_Status_Online ) + ")" ;
2015-03-26 19:36:18 +00:00
else if ( this . State = = 2 )
2015-07-06 11:04:54 +00:00
state = " (" + Language . Translate ( Language . StringID . Menu_File_Status_Busy ) + ")" ;
2015-03-26 19:36:18 +00:00
else if ( this . State = = 3 )
2015-07-06 11:04:54 +00:00
state = " (" + Language . Translate ( Language . StringID . Menu_File_Status_Away ) + ")" ;
2015-03-26 19:36:18 +00:00
else
2015-07-06 11:04:54 +00:00
state = " (" + Language . Translate ( Language . StringID . Offline ) + ")" ;
2015-03-26 19:36:18 +00:00
string text = this . Name + state + "\n" + this . Message ;
TMPListID = pos ;
bool tmp = listView . AutoUpdate ;
listView . AutoUpdate = false ;
listView . SuspendLayout ( ) ; //2014.12.21.
while ( listView . Items . Count < = TMPListID ) //Azt is adja hozzá, ami a kész listaelem lesz
{
var pictb = new PictureBox ( ) ;
pictb . SizeMode = PictureBoxSizeMode . Zoom ;
2015-07-06 11:04:54 +00:00
pictb . Image = Image ; //2015.05.30.
var listtext = new FastColoredTextBox ( ) ; //2015.07.05.
listtext . ShowLineNumbers = false ; //2015.07.05.
var style = new TextBoxHelpers . GifImageStyle ( listtext ) ; //2015.07.05.
foreach ( var item in TextFormat . TextFormats )
{ //2015.07.05.
foreach ( var item2 in item . Emoticons )
{
style . ImagesByText . Add ( item2 . Value , item2 . Image ) ;
}
}
listtext . Text = text ; //2015.07.05.
listtext . TextChanged + = delegate ( object sender , TextChangedEventArgs e )
{
if ( style = = null )
return ;
e . ChangedRange . ClearStyle ( StyleIndex . All ) ;
foreach ( var key in style . ImagesByText . Keys )
{
string pattern = Regex . Replace ( key , RegexSpecSymbolsPattern , "\\$0" ) ;
e . ChangedRange . SetStyle ( style , pattern ) ;
}
} ;
style . StartAnimation ( ) ; //2015.07.05.
listtext . OnTextChanged ( ) ; //2015.07.05.
listView . Items . Add ( new RichListViewItem ( new Control [ ] { pictb , listtext } ) ) ; //2015.07.05.
2015-03-26 19:36:18 +00:00
}
2015-07-06 11:04:54 +00:00
if ( Image = = null ) //2015.05.30.
( ( PictureBox ) listView . Items [ TMPListID ] . SubItems [ 0 ] ) . Image = UserInfo . NoImage ; //2015.05.30.
else
( ( PictureBox ) listView . Items [ TMPListID ] . SubItems [ 0 ] ) . Image = Image ; //2015.05.30.
2015-03-26 19:36:18 +00:00
listView . Items [ TMPListID ] . SubItems [ 1 ] . Text = text ;
listView . AutoUpdate = tmp ;
listView . ResumeLayout ( true ) ; //2014.12.21.
2014-04-25 21:55:43 +00:00
}
2015-07-06 11:04:54 +00:00
const string RegexSpecSymbolsPattern = @"[\^\$\[\]\(\)\.\\\*\+\|\?\{\}]" ;
public override string ToString ( )
{ //2015.04.03.
string str = "" ;
foreach ( var setting in Storage . LoggedInSettings )
if ( setting . Key . StartsWith ( "userinfo_" + UserID + "_" ) )
str + = setting . Key . Substring ( setting . Key . IndexOf ( UserID . ToString ( ) ) ) + "=" + setting . Value + "\n" ;
str = str . Remove ( str . Length - 1 ) ;
return str ;
}
2015-08-23 17:05:03 +00:00
#region IDisposable Support
private bool disposedValue = false ; // To detect redundant calls
protected virtual void Dispose ( bool disposing )
{
if ( ! disposedValue )
{
if ( disposing )
{
UpdateTimer . Dispose ( ) ; //2015.08.23.
}
disposedValue = true ;
}
}
// This code added to correctly implement the disposable pattern.
public void Dispose ( )
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose ( true ) ;
}
#endregion
2014-04-25 21:55:43 +00:00
}
}