ArgusTV.Recorder.MediaPortalTvServer.RecordingThread.EnsureCardFree C# (CSharp) Метод

EnsureCardFree() приватный Метод

private EnsureCardFree ( bool allowOtherArgusUser, string &errorMessage, bool &argusIsRecordingOnCard ) : bool
allowOtherArgusUser bool
errorMessage string
argusIsRecordingOnCard bool
Результат bool
        private bool EnsureCardFree(bool allowOtherArgusUser, ref string errorMessage, out bool argusIsRecordingOnCard)
        {
            argusIsRecordingOnCard = false;
            IUser[] cardUsers = TvServerPlugin.TvController_GetUsersForCard(_recordOnCard.IdCard);
            if (cardUsers != null)
            {
                TvDatabase.TuningDetail tuning = Utility.FindTuningDetailOnCard(_channel, _recordOnCard.IdCard);
                foreach (IUser cardUser in cardUsers)
                {
                    if (!cardUser.Name.Equals("epg", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (cardUser.Name.StartsWith("ArgusTV"))
                        {
                            if (!allowOtherArgusUser
                                && !Utility.IsSameTransponder(_recordOnCard.IdCard, tuning, cardUser.IdChannel))
                            {
                                // Seems another ARGUS TV user is using this card, but on a different
                                // transponder!  Normally this should never happen, but in rare conditions
                                // we need to be able to handle this.
                                errorMessage = "Card is in use by previous recording";
                                argusIsRecordingOnCard = true;
                                return false;
                            }
                        }
                        else
                        {
                            IUser tmpUser = cardUser;
                            if (TvServerPlugin.TvController_IsRecording(ref tmpUser))
                            {
                                if (!TvServerPlugin.TvController_StopRecording(ref tmpUser))
                                {
                                    errorMessage = "Failed to stop recording on channel " + _channel.DisplayName;
                                    return false;
                                }
                            }
                            else if (TvServerPlugin.TvController_IsTimeShifting(ref tmpUser))
                            {
                                if (!Utility.IsSameTransponder(_recordOnCard.IdCard, tuning, tmpUser.IdChannel))
                                {
                                    if (!TvServerPlugin.TvController_StopTimeShifting(ref tmpUser, TvStoppedReason.RecordingStarted))
                                    {
                                        errorMessage = "Failed to stop timeshifting on channel " + _channel.DisplayName;
                                        return false;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return true;
        }