Beispiel #1
0
 public abstract MailMessage GetMessage(uint uid, FetchOption options, bool flag);
Beispiel #2
0
 public abstract IEnumerable<MailMessage> GetMessages(IEnumerable<uint> uids, FetchOption options, bool flag);
Beispiel #3
0
        public override MailMessage GetMessage(uint uid, FetchOption options = FetchOption.Normal, bool flag = false)
        {
            if (!Authed)
            {
                throw new NotAuthenticatedException();
            }

            string command = options == FetchOption.HeadersOnly ? ("TOP " + uid + " 0") : ("RETR " + uid);
            StringBuilder builder = new StringBuilder();
            lock (sequenceLock)
            {
                string response = SendCommandGetResponse(command);
                if (!IsResponseOK(response))
                {
                    throw new BadServerResponseException(response);
                }

                while ((response = GetResponse()) != ".")
                {
                    builder.AppendLine(response);
                }

                if (flag)
                {
                    DeleteMessage(uid);
                }
            }

            return options == FetchOption.HeadersOnly ? MessageBuilder.FromHeader(builder.ToString()) : MessageBuilder.FromMIME822(builder.ToString());
        }
Beispiel #4
0
        public override IEnumerable<MailMessage> GetMessages(IEnumerable<uint> uids = null, FetchOption options = FetchOption.Normal, bool flag = false)
        {
            List<MailMessage> list = new List<MailMessage>();
            if (uids == null)
            {
                uids = GetMessageNumbers();
            }

            foreach (uint n in uids)
            {
                list.Add(GetMessage(n, options, flag));
            }

            return list.ToArray();
        }
Beispiel #5
0
        /// <summary>
        /// アドオンを初期化する
        /// </summary>
        /// <returns></returns>
        public async Task <IAttemptResult> InitializeAsync()
        {
            if (this.isInitialized)
            {
                return(new AttemptResult()
                {
                    Message = "既に初期化されています。"
                });
            }

            this._initializeAwaiterHandler.RegisterStep(AwaiterNames.Addon, typeof(VM::MainWindowViewModel));
            await this._initializeAwaiterHandler.GetAwaiter(AwaiterNames.Addon);

            IAttemptResult dResult = this._uninstaller.DeleteListed();

            if (!dResult.IsSucceeded)
            {
                return(new AttemptResult()
                {
                    Message = "アンインストール済みアドオンフォルダーの削除に失敗しました。", Exception = dResult.Exception
                });
            }

            IAttemptResult mResult = this._installer.ReplaceTemporaryFiles();

            if (!mResult.IsSucceeded)
            {
                return(new AttemptResult()
                {
                    Message = mResult.Message, Exception = mResult.Exception
                });
            }

            List <string> packages;

            try
            {
                packages = this._directoryIO.GetDirectorys(FileFolder.AddonsFolder);
            }
            catch (Exception e)
            {
                this._logger.Error("アドオンパッケージ一覧の取得に失敗しました。", e);
                return(new AttemptResult()
                {
                    Message = "アドオンパッケージ一覧の取得に失敗しました。", Exception = e
                });
            }

            bool isDevMode = this._settingHandler.GetBoolSetting(SettingsEnum.IsDevMode);
            bool isAddonDebuggingEnable = this._settingHandler.GetBoolSetting(SettingsEnum.IsAddonDebugEnable);

            foreach (var packagePath in packages)
            {
                string package = Path.GetFileName(packagePath);
                IAttemptResult <bool> result = await this._engine.InitializeAsync(package, isDevMode);

                if (!result.IsSucceeded)
                {
                    var failedResult = new FailedAddonResult(package, result.Message ?? string.Empty, result.Data);
                    this.LoadFailedAddons.Add(failedResult);
                }
            }

            foreach (KeyValuePair <int, IAddonContext> item in this._contexts.Contexts)
            {
                AddonInfomation info       = this._container.GetAddon(item.Key);
                IAPIEntryPoint  entryPoint = DIFactory.Provider.GetRequiredService <IAPIEntryPoint>();

                IAttemptResult result = item.Value.Initialize(info, engine =>
                {
                    entryPoint.Initialize(info, engine);
                    engine.AddHostObject("application", entryPoint);

                    IFetch fetch = DIFactory.Provider.GetRequiredService <IFetch>();
                    fetch.Initialize(info);
                    Func <string, dynamic?, Task <Response> > fetchFunc = (url, optionObj) =>
                    {
                        var option = new FetchOption()
                        {
                            method      = optionObj?.method,
                            body        = optionObj?.body,
                            credentials = optionObj?.credentials,
                        };

                        return(fetch.FetchAsync(url, option));
                    };
                    engine.AddHostObject("fetch", fetchFunc);
                }, entryPoint, isAddonDebuggingEnable);

                if (!result.IsSucceeded)
                {
                    var failedResult = new FailedAddonResult(info.PackageID.Value, result.Message ?? string.Empty, true);
                    this.LoadFailedAddons.Add(failedResult);
                }
            }

            IAttemptResult <IEnumerable <string> > packageIds = this._storeHandler.GetAllAddonsPackageID();

            if (packageIds.IsSucceeded && packageIds.Data is not null)
            {
                List <string> loaded = this._contexts.Contexts.Select(v => v.Value.AddonInfomation !.PackageID.Value).ToList();
                foreach (var package in packageIds.Data)
                {
                    if (!loaded.Contains(package))
                    {
                        var failedResult = new FailedAddonResult(package, "インストールされていますが、ファイルが見つかりませんでした。", true);
                        this.LoadFailedAddons.Add(failedResult);
                    }
                }
            }

            this.isInitialized = true;
            return(new AttemptResult()
            {
                IsSucceeded = true
            });
        }
Beispiel #6
0
 public override IEnumerable<MailMessage> GetMessages(IEnumerable<uint> uids, FetchOption options, bool flag)
 {
     MailMessages = imapadapt.GetMessages(uids, options, true, null).ToList();
     return imapadapt.GetMessages(uids, options, true, null);
 }
Beispiel #7
0
 public override MailMessage GetMessage(uint uid, FetchOption options, bool flag)
 {
     return imapadapt.GetMessage(uid, options);
 }
Beispiel #8
0
        public IEnumerable<MailMessage> GetMessages(IEnumerable<uint> uids, FetchOption options, bool seen = true, string mailbox = null)
        {
            uids.ThrowIfNull("uids");
            List<MailMessage> list = new List<MailMessage>();
            foreach (uint uid in uids)
            {
                list.Add(GetMessage(uid, options, seen, mailbox));
            }

            return list;
        }
Beispiel #9
0
 public MailMessage GetMessage(uint uid, FetchOption options, bool seen = false, string mailbox = null)
 {
     AssertValid();
     switch (options)
     {
         case FetchOption.HeadersOnly:
             return MessageBuilder.FromHeader(GetMailHeader(uid, seen, mailbox));
         case FetchOption.NoAttachments:
             return GetMessage(
                 uid,
                 p =>
             {
                 return p.Disposition.ContentType !=
     ContentDispositionType.Attachment;
             },
                 seen,
                 mailbox);
         case FetchOption.TextOnly:
             return GetMessage(
                 uid,
                 p => { return p.ContentType == ContentType.Text; },
                 seen,
                 mailbox);
         default:
             return MessageBuilder.FromMIME822(GetMessageData(uid, seen, mailbox));
     }
 }