Esempio n. 1
0
        public override TLObject FromBytes(byte[] bytes, ref int position)
        {
            bytes.ThrowExceptionIfIncorrect(ref position, Signature);

            UserId = GetObject <TLInt>(bytes, ref position);
            Status = GetObject <TLUserStatus>(bytes, ref position);

            return(this);
        }
Esempio n. 2
0
        public static string Convert(TLUserStatus status)
        {
            if (status == null)
            {
                return(AppResources.LastSeenLongTimeAgo);
            }

            if (!(status is TLUserStatusEmpty))
            {
                if (status is TLUserStatusOnline)
                {
                    return(LowercaseConverter.Convert(AppResources.Online));
                }

                if (status is TLUserStatusRecently)
                {
                    return(LowercaseConverter.Convert(AppResources.LastSeenRecently));
                }

                if (status is TLUserStatusLastMonth)
                {
                    return(LowercaseConverter.Convert(AppResources.LastSeenWithinMonth));
                }

                if (status is TLUserStatusLastWeek)
                {
                    return(LowercaseConverter.Convert(AppResources.LastSeenWithinWeek));
                }

                if (status is TLUserStatusOffline)
                {
                    var cultureInfo      = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
                    var shortTimePattern = GetShortTimePattern(ref cultureInfo);

                    var clientDelta = IoC.Get <IMTProtoService>().ClientTicksDelta;
                    //var utc0SecsLong = (((TLUserStatusOffline)status).WasOnline).Value * 4294967296 - clientDelta;
                    var utc0SecsInt = ((TLUserStatusOffline)status).WasOnline.Value - clientDelta / 4294967296.0;

                    //var utc0SecsInt = (((TLUserStatusOffline) status).WasOnline).Value;
                    var lastSeen = Telegram.Api.Helpers.Utils.UnixTimestampToDateTime(utc0SecsInt);

                    var lastSeenTimeSpan = DateTime.Now - lastSeen;

                    // Just now
                    if (lastSeenTimeSpan.TotalMinutes <= 1)
                    {
                        return(AppResources.LastSeenJustNow.ToLowerInvariant());
                    }

                    // Up to one hour
                    if (lastSeenTimeSpan < TimeSpan.FromMinutes(60.0))
                    {
                        var minutes = Language.Declension(
                            lastSeenTimeSpan.Minutes == 0 ? 1 : lastSeenTimeSpan.Minutes,
                            AppResources.MinuteAccusative,
                            null,
                            AppResources.MinuteGenitiveSingular,
                            AppResources.MinuteGenitivePlural,
                            lastSeenTimeSpan.Minutes < 2
                                ? string.Format("{1} {0}", AppResources.MinuteNominativeSingular, 1).ToLowerInvariant()
                                : string.Format("{1} {0}", AppResources.MinuteNominativePlural, Math.Abs(lastSeenTimeSpan.Minutes))).ToLowerInvariant();

                        return(string.Format(AppResources.LastSeen, minutes).ToLowerInvariant());
                    }

                    // Today
                    if (lastSeen.Date == DateTime.Now.Date)
                    {
                        return(string.Format(
                                   AppResources.LastSeenTodayAt.ToLowerInvariant(),
                                   new DateTime(lastSeen.TimeOfDay.Ticks).ToString(shortTimePattern, cultureInfo)));
                    }

                    // Yesterday
                    if (lastSeen.Date.AddDays(1.0) == DateTime.Now.Date)
                    {
                        return(string.Format(
                                   AppResources.LastSeenYesterdayAt.ToLowerInvariant(),
                                   new DateTime(lastSeen.TimeOfDay.Ticks).ToString(shortTimePattern, cultureInfo)));
                    }

                    // this year
                    if (lastSeen.Date.AddDays(365) >= DateTime.Now.Date)
                    {
                        return(string.Format(
                                   AppResources.LastSeenAtDate.ToLowerInvariant(),
                                   lastSeen.ToString(AppResources.UserStatusDayFormat, cultureInfo),
                                   new DateTime(lastSeen.TimeOfDay.Ticks).ToString(shortTimePattern, cultureInfo)));
                    }

                    return(string.Format(
                               AppResources.LastSeenAtDate.ToLowerInvariant(),
                               lastSeen.ToString(AppResources.UserStatusYearDayFormat, cultureInfo),
                               new DateTime(lastSeen.TimeOfDay.Ticks).ToString(shortTimePattern, cultureInfo)));
                }
            }

            return(LowercaseConverter.Convert(AppResources.LastSeenLongTimeAgo));
        }