示例#1
0
            public bool Update()
            {
                using (owner.trace.NewNamedFrame("Updating {0}", this.fileName))
                {
                    CheckDisposed();

                    try
                    {
                        if (simpleMedia == null)
                        {
                            owner.trace.Info("SimpleMedia object not created yet. Creating");
                            simpleMedia = new SimpleFileMedia(
                                owner.fileSystem,
                                SimpleFileMedia.CreateConnectionParamsFromFileName(Path.Combine(owner.baseDirectory, FileName))
                                );
                        }

                        owner.trace.Info("Updating simple media");
                        simpleMedia.Update();

                        if (!simpleMedia.IsAvailable)
                        {
                            owner.trace.Info("File is not avaliable (i.e. has been deleted)");
                            return(false);
                        }

                        if (firstMessageTime == null)
                        {
                            owner.trace.Info("First message time is unknown. Calcalating it");
                            using (IPositionedMessagesReader reader = (IPositionedMessagesReader)Activator.CreateInstance(
                                       owner.logReaderType, new MediaBasedReaderParams(owner.tempThreads, SimpleMedia, owner.tempFilesManager), owner.logFormatInfo))
                            {
                                owner.trace.Info("Reader created");

                                reader.UpdateAvailableBounds(false);
                                owner.trace.Info("Bounds found");

                                IMessage first = PositionedMessagesUtils.ReadNearestMessage(reader, reader.BeginPosition);
                                if (first == null)
                                {
                                    owner.trace.Warning("No messages found");
                                    return(false);
                                }

                                owner.trace.Info("First message: {0} '{1}'", first.Time, first.Text);
                                firstMessageTime = first.Time;
                            }
                        }

                        owner.trace.Info("Part updated OK");
                        return(true);
                    }
                    catch (Exception e)
                    {
                        owner.trace.Error(e, "Failure during part update");
                        return(false);
                    }
                }
            }
示例#2
0
        public static async Task <SimpleFileMedia> Create(IFileSystem fileSystem, IConnectionParams connectParams)
        {
            var media = new SimpleFileMedia(fileSystem, connectParams);

            try
            {
                await media.Init();

                await media.Update();

                return(media);
            }
            catch
            {
                media.Dispose();
                throw;
            }
        }