Example #1
0
        /// <summary>
        /// поиск повторов
        /// </summary>
        private void Calculate_Double()
        {
            string previous_callsign = "";

            foreach (QSO item in items)
            {
                //if (Call == "RN0CW" && item.Raw.Number == 32)
                //{
                //    Console.WriteLine(item.Dump());
                //}
                if (!item.Counters.Filtered && (!item.Counters.ErrorOnCheck ||
                                                item.Counters.ErrorOnCheck &&
                                                (item.Counters.ErrorType == ErrorType.doublebymode ||
                                                 item.Counters.ErrorType == ErrorType.doublebytime ||
                                                 item.Counters.ErrorType == ErrorType.similarqso))
                    )
                {
                    /// TODO: решить тут все вопросы по проверкам
                    /// В каждом подтуре, на каждом диапазоне с одним и тем же корреспондентом
                    /// разрешается провести по две радиосвязи: одну радиосвязь – телеграфом CW,
                    /// одну – телефоном (FM или PH)
                    if (Config.double_check == 1)
                    {
                        /// получили все связи с этим позывным в текущем туре
                        /// ограничение: такой же ражим работы
                        QSOList list = items.GetPreviousInTour(item, true);
                        if (list.Count > 0)
                        {
                            QSO r = list[0];
                            // если предыдущая QSO подтверждена
                            if (r.Counters.OK || r.Counters.ErrorType == ErrorType.doublebymode || r.Counters.ErrorType == ErrorType.doublebytime)
                            {
                                item.Counters.OK = false;
                                item.Errors.Clear();
                                item.Errors.Add("Subtour double [mode] with QSO: " + r.Raw.Number);
                                item.Counters.SetError(ErrorType.doublebymode);
                                item.LinkedQSO = r;
                            }
                            // если предыдущая QSO не подтверждена и она не предыдущий дубль то текущая QSO не может быть дублем
                            else if (r.Counters.OK == false && r.Counters.ErrorType != ErrorType.doublebymode && r.Counters.ErrorType != ErrorType.doublebytime)
                            {
                                // обнуляем флаг что текущая QSO дубль
                                item.Counters.OK = false;
                                item.Errors.Clear();
                                item.Counters.SetError(ErrorType.clear);
                                item.LinkedQSO = null;
                            }
                            #region debug
                            //if (list.Count > 1)
                            //{
                            //    Console.WriteLine("=2===============================================================");
                            //    Console.WriteLine(item.Dump());
                            //    foreach (QSO l in list)
                            //    {
                            //        Console.WriteLine(l.Dump());
                            //    }
                            //    //Console.ReadKey();
                            //}
                            #endregion
                        }
                    }

                    ///// Повторную радиосвязь разными видами модуляции с одним и тем же корреспондентом
                    ///// разрешается проводить не ранее, чем через 3 минуты после предыдущей связи, или
                    ///// через одну радиосвязь, проведенную с другим корреспондентом.
                    if (Config.repeat_call > 0)
                    {
                        QSOList list = items.GetPreviousInTour(item, false);
                        if (list.Count > 0)
                        {
                            QSO r = list[0];
                            if (previous_callsign == item.Raw.RecvCall && r.Counters.Offset < Config.repeat_call && r.Counters.OK)
                            {
                                item.Counters.OK = false;
                                item.Errors.Clear();
                                item.Errors.Add("Subtour double [time] with QSO: " + r.Raw.Number);
                                item.Counters.SetError(ErrorType.doublebytime);
                                item.LinkedQSO = r;
                            }
                        }
                    }
                }
                previous_callsign = item.Raw.RecvCall;
            }
        }