private async Task<InlineKeyboardMarkup> PrepareKeyboardAsync(Identified<Tobacco> tobacco)
        {
            const byte defaultCount = 5;
            var buttons = new List<IEnumerable<InlineKeyboardButton>>();
            var dbUser = UserContextProvider.DatabaseUser;
            var orderId = await cacheProvider
                .UserLevel<CurrentOrder>()
                .GetAsync();
            if (orderId.HasValue)
            {
                var orderSomeGramsFormat = await TranslationsResolver
                    .ResolveAsync(TelegramTranslationKeys.OrderSomeGrams);
                var innerButtons = new List<InlineKeyboardButton>();
                for (var i = defaultCount; i < defaultCount * 4 + 1; i *= 2)
                {
                    innerButtons.Add(new InlineKeyboardButton
                    {
                        Text = string.Format(orderSomeGramsFormat, i),
                        CallbackData =
                            $"/{nameof(AddToOrderCommand).ExtractCommandName()} {orderId} {nameof(Tobacco)} {tobacco.Index} {i}"
                    });
                }

                buttons.Add(innerButtons);
            }

            if (dbUser.State > TelegramUserStates.Default)
            {
                var (key, command) = tobacco.Entity.Photos.Any()
                    ? (TelegramTranslationKeys.DeletePhotos, nameof(DeleteTobaccoPhotosCommand))
                    : (TelegramTranslationKeys.SetPhotos, nameof(AskForTobaccoPhotosCommand));
                var (deleteTranslation, secondTranslation) = await TranslationsResolver
                    .ResolveAsync(
                        TelegramTranslationKeys.Delete,
                        key
                    );
                buttons.AddRange(new[]
                {
                    new[]
                    {
                        new InlineKeyboardButton
                        {
                            Text = deleteTranslation,
                            CallbackData = $"/{nameof(DeleteTobaccoCommand).ExtractCommandName()} {tobacco.Index}"
                        }
                    },
                    new[]
                    {
                        new InlineKeyboardButton
                        {
                            Text = secondTranslation,
                            CallbackData =
                                $"/{command.ExtractCommandName()} {tobacco.Entity.Id}"
                        }
                    }
                });
            }

            return new InlineKeyboardMarkup(buttons);
        }
Example #2
0
        void objectAdded(Identified obj)
        {
            var dn = new DebugNode(obj, nicks.ContainsKey(obj.ID) ? nicks[obj.ID] : null);

            nodes.Add(dn);
            if (obj is Client)
            {
                if (dn.bindClient.Connected)
                {
                    clientsOn.Add(dn);
                }
                else
                {
                    clientsOff.Add(dn);
                }
                DebugNode dna = dn.Clone();
                nodes.Add(dna);
                clientsAll.Add(dna);
            }
            else if (obj is Server)
            {
                servers.Add(dn);
                foreach (Link l in dn.bindServer.clients)
                {
                    var ldn = new DebugNode(l, nicks.ContainsKey(obj.ID) ? nicks[obj.ID] : null);
                    nodes.Add(ldn);
                    dn.Nodes.Add(ldn);
                }
            }

            treeView.ExpandAll();
        }
Example #3
0
        public override IDeepCopyable CopyTo(IDeepCopyable other)
        {
            var dest = other as DetectedIssue;

            if (dest == null)
            {
                throw new ArgumentException("Can only copy to an object of the same type", "other");
            }

            base.CopyTo(dest);
            if (Identifier != null)
            {
                dest.Identifier = new List <Hl7.Fhir.Model.Identifier>(Identifier.DeepCopy());
            }
            if (StatusElement != null)
            {
                dest.StatusElement = (Code <Hl7.Fhir.Model.ObservationStatus>)StatusElement.DeepCopy();
            }
            if (Code != null)
            {
                dest.Code = (Hl7.Fhir.Model.CodeableConcept)Code.DeepCopy();
            }
            if (SeverityElement != null)
            {
                dest.SeverityElement = (Code <Hl7.Fhir.Model.DetectedIssue.DetectedIssueSeverity>)SeverityElement.DeepCopy();
            }
            if (Patient != null)
            {
                dest.Patient = (Hl7.Fhir.Model.ResourceReference)Patient.DeepCopy();
            }
            if (Identified != null)
            {
                dest.Identified = (Hl7.Fhir.Model.DataType)Identified.DeepCopy();
            }
            if (Author != null)
            {
                dest.Author = (Hl7.Fhir.Model.ResourceReference)Author.DeepCopy();
            }
            if (Implicated != null)
            {
                dest.Implicated = new List <Hl7.Fhir.Model.ResourceReference>(Implicated.DeepCopy());
            }
            if (Evidence != null)
            {
                dest.Evidence = new List <Hl7.Fhir.Model.DetectedIssue.EvidenceComponent>(Evidence.DeepCopy());
            }
            if (DetailElement != null)
            {
                dest.DetailElement = (Hl7.Fhir.Model.FhirString)DetailElement.DeepCopy();
            }
            if (ReferenceElement != null)
            {
                dest.ReferenceElement = (Hl7.Fhir.Model.FhirUri)ReferenceElement.DeepCopy();
            }
            if (Mitigation != null)
            {
                dest.Mitigation = new List <Hl7.Fhir.Model.DetectedIssue.MitigationComponent>(Mitigation.DeepCopy());
            }
            return(dest);
        }
Example #4
0
        void objectRemoved(Identified obj)
        {
            List <DebugNode> dns = nodes.FindAll(a => a.ID == obj.ID);

            foreach (DebugNode dn in dns)
            {
                if (cbRmUnused.Checked)
                {
                    nodes.Remove(dn);
                    if (obj is Client)
                    {
                        clientsOn.Remove(dn);
                        clientsOff.Remove(dn);
                        clientsAll.Remove(dn);
                    }
                    else if (obj is Server)
                    {
                        servers.Remove(dn);
                    }
                    if (nicks.ContainsKey(obj.ID))
                    {
                        nicks.Remove(obj.ID);
                    }
                }
                dn.NodeFont = new Font(dn.NodeFont ?? treeView.Font, FontStyle.Strikeout);
            }

            treeView.ExpandAll();
        }
Example #5
0
 public override int GetHashCode()
 {
     unchecked
     {
         int result = base.GetHashCode();
         result = (result * 397) ^ PeakCountRatio.GetHashCode();
         result = (result * 397) ^ (RetentionTime.HasValue ? RetentionTime.Value.GetHashCode() : 0);
         result = (result * 397) ^ (StartRetentionTime.HasValue ? StartRetentionTime.Value.GetHashCode() : 0);
         result = (result * 397) ^ (EndRetentionTime.HasValue ? EndRetentionTime.Value.GetHashCode() : 0);
         result = (result * 397) ^ (Fwhm.HasValue ? Fwhm.Value.GetHashCode() : 0);
         result = (result * 397) ^ (Area.HasValue ? Area.Value.GetHashCode() : 0);
         result = (result * 397) ^ (AreaMs1.HasValue ? AreaMs1.Value.GetHashCode() : 0);
         result = (result * 397) ^ (AreaFragment.HasValue ? AreaFragment.Value.GetHashCode() : 0);
         result = (result * 397) ^ (BackgroundArea.HasValue ? BackgroundArea.Value.GetHashCode() : 0);
         result = (result * 397) ^ (BackgroundAreaMs1.HasValue ? BackgroundAreaMs1.Value.GetHashCode() : 0);
         result = (result * 397) ^ (BackgroundAreaFragment.HasValue ? BackgroundAreaFragment.Value.GetHashCode() : 0);
         result = (result * 397) ^ (Height.HasValue ? Height.Value.GetHashCode() : 0);
         result = (result * 397) ^ Ratios.GetHashCodeDeep();
         result = (result * 397) ^ (Truncated.HasValue ? Truncated.Value.GetHashCode() : 0);
         result = (result * 397) ^ Identified.GetHashCode();
         result = (result * 397) ^ (LibraryDotProduct.HasValue ? LibraryDotProduct.Value.GetHashCode() : 0);
         result = (result * 397) ^ (IsotopeDotProduct.HasValue ? IsotopeDotProduct.Value.GetHashCode() : 0);
         result = (result * 397) ^ OptimizationStep;
         result = (result * 397) ^ Annotations.GetHashCode();
         result = (result * 397) ^ UserSet.GetHashCode();
         return(result);
     }
 }
Example #6
0
 void addHigh(Identified id, params object[] row)
 {
     if (!closed)
     {
         Invoke(new Action(() => {
             if (id == null || lastSelected?.bind == id)
             {
                 object col3 = "",
                 col4        = "",
                 col5        = "";
                 if (row.Length == 3)
                 {
                     if (row[2] is Directive dir)
                     {
                         col3 = dir.type + "";
                         col4 = $"{dir.from} → {(dir.to == SGuid.Empty ? "Everyone" : dir.to + "")}";
                         col5 = dir.values.Length;
                     }
                 }
                 else
                 {
                     col4 = row[2];
                     col5 = row[3];
                 }
                 tableHigh.Rows.Add(row[0], row[1], col3, col4, col5);
             }
         }));
     }
 }
Example #7
0
 void refreshAll(object sender, TreeNodeMouseClickEventArgs e)
 {
     if (e.Node is DebugNode dn && nodes.Exists(a => a.ID == dn.ID))
     {
         if (lastSelected != null)
         {
             lastSelected.bind.clearEvents();
         }
         lastSelected = dn;
         Identified idBind = dn.bind;
         idBind.tRaw.ItemAdd     += (a, b) => addRaw(idBind, a);
         idBind.tCommand.ItemAdd += (a, b) => addCommand(idBind, a);
         idBind.tHigh.ItemAdd    += (a, b) => addHigh(idBind, a);
         tableRawMsg.Rows.Clear();
         tableRaw.Rows.Clear();
         tableCommands.Rows.Clear();
         tableHigh.Rows.Clear();
         foreach (object[] row in idBind.tRaw.ToList())
         {
             addRaw(null, row);
         }
         foreach (object[] row in idBind.tCommand.ToList())
         {
             addCommand(null, row);
         }
         foreach (object[] row in idBind.tHigh.ToList())
         {
             addHigh(null, row);
         }
     }
 }
Example #8
0
        private async Task <InlineKeyboardMarkup> PrepareKeyboardAsync(Identified <Hookah> hookah)
        {
            const byte defaultCount = 1;
            var        buttons      = new List <IEnumerable <InlineKeyboardButton> >();
            var        dbUser       = UserContextProvider.DatabaseUser;
            var        orderId      = await cacheProvider
                                      .UserLevel <CurrentOrder>()
                                      .GetAsync();

            if (orderId.HasValue)
            {
                buttons.Add(new[]
                {
                    new InlineKeyboardButton
                    {
                        Text         = await TranslationsResolver.ResolveAsync(TelegramTranslationKeys.OrderSomething),
                        CallbackData =
                            $"/{nameof(AddToOrderCommand).ExtractCommandName()} {orderId} {nameof(Hookah)} {hookah.Index} {defaultCount}"
                    }
                });
            }

            if (dbUser.State > TelegramUserStates.Default)
            {
                var(key, command) = hookah.Entity.Photos.Any()
                    ? (TelegramTranslationKeys.DeletePhotos, nameof(DeleteHookahPhotosCommand))
                    : (TelegramTranslationKeys.SetPhotos, nameof(AskForHookahPhotosCommand));

                var(deleteTranslation, secondTranslation) = await TranslationsResolver
                                                            .ResolveAsync(
                    TelegramTranslationKeys.Delete,
                    key
                    );

                buttons.AddRange(new[]
                {
                    new[]
                    {
                        new InlineKeyboardButton
                        {
                            Text         = deleteTranslation,
                            CallbackData = $"/{nameof(DeleteHookahCommand).ExtractCommandName()} {hookah.Index}"
                        }
                    },
                    new[]
                    {
                        new InlineKeyboardButton
                        {
                            Text         = secondTranslation,
                            CallbackData =
                                $"/{command.ExtractCommandName()} {hookah.Entity.Id}"
                        },
                    }
                });
            }

            return(new InlineKeyboardMarkup(buttons));
        }
        private static void CreateFunctionalities(Database db, Identified <RoleToInstall> roleToInstall)
        {
            const string createQuery     = @"
IF NOT exists (SELECT * FROM FunctionalityRole WHERE RoleID = @0 AND FunctionalityName = @1)
BEGIN
    INSERT INTO FunctionalityRole (RoleID, FunctionalityName) VALUES (@0, @1)
END
";
            var          functionalities = roleToInstall.Value.Functionalities.Distinct().ToArray();

            foreach (var functionality in functionalities)
            {
                db.Execute(createQuery, roleToInstall.ID, functionality.ToString());
            }
        }
Example #10
0
 void addRaw(Identified id, params object[] row)
 {
     if (!closed)
     {
         Invoke(new Action(() => {
             if (id == null || lastSelected?.bind == id)
             {
                 tableRaw.Rows.Add(
                     (from cell in row
                      where !(cell is string[])
                      select cell.ToString()).Concat(new[] { ((string[])row[5]).Length + "" }).ToArray());
             }
         }));
     }
 }
Example #11
0
        void addCommand(Identified id, params object[] row)
        {
            if (!closed)
            {
                Invoke(new Action(() => {
                    if (id == null || lastSelected?.bind == id)
                    {
                        tableCommands.Rows.Add(row.Select(c => {
                            if (c is object[])
                            {
                                string[] strs = ((object[])c).AllStrings();
                                return($"{strs[0]}({string.Join(", ", strs.Skip(1))})");
                            }

                            return(c);
                        }).ToArray());
                    }
                }));
            }
        }
        protected override async Task<Message> SendResponseAsync(ICurrentTelegramUserClient client,
            Identified<Tobacco> response)
        {
            var (content, keyboard) = await (
                TranslationsResolver.ResolveAsync(TelegramTranslationKeys.GetTobaccoResult, response.Entity.Name,
                    response.Entity.Price),
                PrepareKeyboardAsync(response)
            ).CombineAsync();

            if (response.Entity.Photos.Any())
            {
                await client.SendMediaGroupAsync(
                    response.Entity.Photos
                        .Select(x => new InputMediaPhoto(new InputMedia(x.TelegramFileId)))
                );
            }

            return await client
                .SendTextMessageAsync(
                    content,
                    replyMarkup: keyboard);
        }
Example #13
0
 public override int GetHashCode()
 {
     unchecked
     {
         int result = base.GetHashCode();
         result = (result * 397) ^ (MassError.HasValue ? MassError.Value.GetHashCode() : 0);
         result = (result * 397) ^ RetentionTime.GetHashCode();
         result = (result * 397) ^ StartRetentionTime.GetHashCode();
         result = (result * 397) ^ EndRetentionTime.GetHashCode();
         result = (result * 397) ^ Area.GetHashCode();
         result = (result * 397) ^ BackgroundArea.GetHashCode();
         result = (result * 397) ^ Height.GetHashCode();
         result = (result * 397) ^ Fwhm.GetHashCode();
         result = (result * 397) ^ IsFwhmDegenerate.GetHashCode();
         result = (result * 397) ^ Identified.GetHashCode();
         result = (result * 397) ^ (IsTruncated.HasValue ? IsTruncated.Value.GetHashCode() : 0);
         result = (result * 397) ^ Rank;
         result = (result * 397) ^ Ratios.GetHashCodeDeep();
         result = (result * 397) ^ OptimizationStep.GetHashCode();
         result = (result * 397) ^ Annotations.GetHashCode();
         result = (result * 397) ^ UserSet.GetHashCode();
         return(result);
     }
 }
Example #14
0
 private void HandleInternal(Identified msg)
 {
     //EventLog.WriteEntry("Fingerpass", "Tray received an identified message " + msg.UnitID.ToString());
     _trayIcon.Identified(msg.UnitID.ToString());
 }
Example #15
0
 protected void linkTables(Identified id2)
 {
     id2._tRaw.ItemAdd     += (o, i) => _tRaw.Add(o);
     id2._tCommand.ItemAdd += (o, i) => _tCommand.Add(o);
     id2._tHigh.ItemAdd    += (o, i) => _tHigh.Add(o);
 }
Example #16
0
 internal static void debugNotice(Identified obj)
 => dbgNotice?.Invoke(obj);
Example #17
0
        void notice(Identified obj)
        {
            if (obj is User u)
            {
                if (nicks.ContainsKey(u.ID))
                {
                    nicks[u.ID] = u.Nickname;
                }
                else
                {
                    nicks.Add(u.ID, u.Nickname);
                }
                foreach (DebugNode n in nodes)
                {
                    if (n.ID == u.ID)
                    {
                        n.Text = u.Nickname;
                    }
                }
            }
            else if (obj is Link)
            {
                foreach (DebugNode node in nodes.ToList())
                {
                    if (node.bind == obj)
                    {
                        DebugNode s = nodes.Find(a => a.Nodes.Contains(node));
                        if (s != null)
                        {
                            s.Nodes.Remove(node);
                        }
                        nodes.Remove(node);
                        nicks.Remove(node.ID);
                    }
                }
            }
            else if (obj is Client c)
            {
                DebugNode n = nodes.Find(a => a.ID == c.ID);
                if (n != null)
                {
                    if (c.Connected)
                    {
                        clientsOff.Remove(n);
                        clientsOn.Add(n);
                    }
                    else
                    {
                        clientsOn.Remove(n);
                        clientsOff.Add(n);
                    }
                }
            }
            else if (obj is Server s)
            {
                DebugNode sN   = nodes.Find(a => a.ID == s.ID);
                var       subN = new DebugNode[sN.Nodes.Count];
                sN.Nodes.CopyTo(subN, 0);
                List <DebugNode> subL = subN.ToList();
                foreach (DebugNode sL in subN)
                {
                    if (!s.clients.Contains(sL.bindLink))
                    {
                        sN.Nodes.Remove(sL);
                    }
                }
                foreach (Link l in s.clients)
                {
                    if (!subL.Exists(a => a.bindLink == l))
                    {
                        var ldn = new DebugNode(l, nicks.ContainsKey(obj.ID) ? nicks[obj.ID] : null);
                        nodes.Add(ldn);
                        sN.Nodes.Add(ldn);
                    }
                }
            }

            treeView.ExpandAll();
        }
Example #18
0
        /// <summary>
        ///     Handles incoming messages.
        /// </summary>
        /// <param name="json">the incoming json as string</param>
        private async void _handleMessage(string json)
        {
            ReceivePacket packet;

            try
            {
                packet = JsonConvert.DeserializeObject <ReceivePacket>(json);
            }
            catch (Exception e)
            {
                _log(LogLevel.WARN, $"Couldn't parse Packet JSON, {e}");
                return;
            }

            try
            {
                // ReSharper disable once SwitchStatementMissingSomeCases
                switch (packet.OpCode)
                {
                case OpCode.DISPATCH:
                {
                    // ReSharper disable once SwitchStatementMissingSomeCases
                    switch (packet.Type)
                    {
                    case GatewayEvent.READY:
                        var readyDispatch = ((JObject)packet.Data).ToObject <ReadyDispatch>();
                        SessionId = readyDispatch.SessionId;
                        _log(LogLevel.DEBUG, $"Ready {readyDispatch.SessionId}");
                        _log(LogLevel.INFO, "Shard Ready");
                        Identified?.Invoke(this, null);
                        break;

                    case GatewayEvent.RESUMED:
                    {
                        var replayed = CloseSequence - Sequence;
                        _log(LogLevel.DEBUG,
                             $"RESUMED {SessionId} | replayed {replayed} events.");
                        _log(LogLevel.INFO, "Shard resumed connection");
                        break;
                    }
                    }

                    if (packet.Seq != null)
                    {
                        Sequence = (int)packet.Seq;
                    }

                    if (packet.Type == null)
                    {
                        _log(LogLevel.WARN, $"Received Dispatch with missing type, {packet.Data}");
                        break;
                    }

                    Dispatch?.Invoke(this, new DispatchEventArgs(Id, packet.Data, (GatewayEvent)packet.Type));
                    _log(LogLevel.DEBUG, $"Received Dispatch of type {packet.Type}");
                    break;
                }

                case OpCode.HEARTBEAT:
                    _log(LogLevel.DEBUG, $"Received Keep-Alive request  (OP {packet.OpCode}). Sending response...");
                    await _heartbeatAsync().ConfigureAwait(false);

                    break;

                case OpCode.RECONNECT:
                    _log(LogLevel.DEBUG,
                         $"Received Reconnect request (OP {packet.OpCode}). Closing connection now...");
                    await DisconnectAsync((int)GatewayCloseCode.UNKNOWN_ERROR, "Received Reconnect request")
                    .ConfigureAwait(false);

                    break;

                case OpCode.INVALID_SESSION:
                    _log(LogLevel.DEBUG, $"Received Invalidate request (OP {packet.OpCode}). Invalidating....");
                    var data = (bool)packet.Data;
                    if (data)
                    {
                        await DisconnectAsync((int)GatewayCloseCode.UNKNOWN_ERROR, "Session Invalidated")
                        .ConfigureAwait(false);

                        break;
                    }

                    SessionId = null;
                    Sequence  = null;
                    await DisconnectAsync((int)WebSocketCloseStatus.NormalClosure, "Session Invalidated");

                    break;

                case OpCode.HELLO:
                    _log(LogLevel.DEBUG, $"Received HELLO packet (OP {packet.OpCode}). Initializing keep-alive...");
                    var helloData = ((JObject)packet.Data).ToObject <HelloPacket>();
                    _startHeartbeatTimer(helloData.HeartbeatInterval);

                    await _authenticateAsync();

                    break;

                case OpCode.HEARTBEAT_ACK:
                    var latency = DateTime.Now - HeartbeatSentAt;
                    var pingMs  = (int)latency.TotalMilliseconds;
                    _log(LogLevel.DEBUG, $"Received Heartbeat Ack (OP {packet.OpCode}), Latency of {pingMs}ms");
                    LastHeartbeatAcked = true;
                    LatencyUpdate?.Invoke(this, new LatencyUpdateArgs(Id, pingMs));
                    break;

                default:
                    _log(LogLevel.WARN, $"Received unknown op-code: {packet.OpCode}");
                    break;
                }
            }
            catch (Exception e)
            {
                _log(LogLevel.ERROR, $"Exception in Shard#_handleMessage, {e}");
            }
        }