ThisAddIn.cs
author Thomas
Wed, 14 Mar 2018 17:13:45 +0100
branchOUT-417
changeset 2058 ecee220c7d7d
parent 2053 054906b5e067
child 2063 cf63da070820
permissions -rw-r--r--
OUT-417: Detect new account during message creation. - If new account is detected, add create pEp settings and run Myself() - As new account is not guaranteed to show up in Session.Accounts, store all accounts' delivery store ids with pEp account settings - Modify all mail item extensions to first try to match a store id in pEp account settings and only iterate through accounts list as fallback
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1986
a023129358a0 OUT-374: Adjust registry path
Thomas
parents: 1985
diff changeset
     1
using pEp.UI;
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     2
using pEpCOMServerAdapterLib;
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     3
using System;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     4
using System.Collections.Generic;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
     5
using System.ComponentModel;
1570
59f509d731f3 OUT-205: Add garbage collector to delete all unconsumed sync messages every two hours.
Thomas
parents: 1564
diff changeset
     6
using System.Diagnostics;
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     7
using System.Globalization;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
     8
using System.IO;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     9
using System.Runtime.InteropServices;
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    10
using System.Threading;
47
d3b5164cc922 read in extra keys
Volker Birk <vb@pep-project.org>
parents: 46
diff changeset
    11
using System.Windows.Forms;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
    12
using Office = Microsoft.Office.Core;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    13
using Outlook = Microsoft.Office.Interop.Outlook;
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    14
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    15
namespace pEp
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    16
{
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    17
    public partial class ThisAddIn
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    18
    {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    19
        #region VSTO generated code
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    20
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    21
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    22
        /// Required method for Designer support - do not modify
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    23
        /// the contents of this method with the code editor.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    24
        /// </summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    25
        private void InternalStartup()
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    26
        {
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    27
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    28
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    29
        }
201
9e0548fa3942 Code reformatting.
Markus Schaber <markus@pep-security.net>
parents: 191
diff changeset
    30
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    31
        #endregion
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    32
1441
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    33
        internal delegate void NewAccountEventHandler(object sender, NewAccountEventArgs e);
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    34
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    35
        /// <summary>
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    36
        /// Custom event for when the add-in is starting for the first time.
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    37
        /// </summary>
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    38
        internal event EventHandler FirstStartup;
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    39
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    40
        /// <summary>
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    41
        /// Custom event for when a new account is detected by the add-in.
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    42
        /// </summary>
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    43
        internal event NewAccountEventHandler NewAccount;
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
    44
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
    45
        private List<KeyValuePair<CultureInfo, string>> _LanguageList       = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
    46
        private static pEpEngine                        _PEPEngine          = null;
1987
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
    47
        private static Exception                        _PEPEngineException = null;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
    48
        private Outlook.Folder                          _PEPStoreRootFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
    49
        private PEPSettings                             _Settings           = null;
1948
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
    50
        private OutlookOptions                          _OutlookOptions     = null;
1770
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
    51
        private static DecryptionStack                  _DecryptionStack    = null;
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
    52
1405
cd14f9d6cb61 Fix warnings.
Dean
parents: 1398
diff changeset
    53
#if !READER_RELEASE_MODE
cd14f9d6cb61 Fix warnings.
Dean
parents: 1398
diff changeset
    54
        private AdapterCallbacks adapterCallbacks = null;
cd14f9d6cb61 Fix warnings.
Dean
parents: 1398
diff changeset
    55
#endif
cd14f9d6cb61 Fix warnings.
Dean
parents: 1398
diff changeset
    56
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
    57
        private bool                       initialized               = false;
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
    58
        private bool                       isItemSendHandlerEnabled  = true;
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
    59
        private FormControlOptions.State   lastOptionsState          = null;
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
    60
        private Dictionary<string, string> userIdCache               = new Dictionary<string, string>();
1503
1237dffeb926 OUT-172: Add default inbox folders to watched items.
Dean
parents: 1502
diff changeset
    61
        private List<WatchedFolder>        watchedFolders            = new List<WatchedFolder>();
1570
59f509d731f3 OUT-205: Add garbage collector to delete all unconsumed sync messages every two hours.
Thomas
parents: 1564
diff changeset
    62
        private System.Windows.Forms.Timer inboxCleaner              = null;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    63
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    64
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    65
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    66
         * Property Accessors
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    67
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    68
         *************************************************************/
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    69
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    70
        /// <summary>
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    71
        /// Gets the list of languages supported in the pEp engine.
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    72
        /// The list of language includes a key-value pair of the culture as well as a 
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    73
        /// display phrase in the native language for the trustwords.
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    74
        /// (phrase example: "I want to display the trustwords in English language")
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    75
        /// </summary>
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    76
        internal List<KeyValuePair<CultureInfo, string>> LanguageList
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    77
        {
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    78
            get
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    79
            {
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    80
                string code;
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    81
                string phrase;
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    82
                string engineList;
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    83
                string[] languages;
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    84
                string[] language;
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    85
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    86
                if (this._LanguageList == null)
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
    87
                {
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    88
                    this._LanguageList = new List<KeyValuePair<CultureInfo, string>>();
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    89
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    90
                    try
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    91
                    {
1343
1520e906a692 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1340
diff changeset
    92
                        engineList = ThisAddIn.PEPEngine.GetLanguageList();
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    93
                    }
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    94
                    catch
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    95
                    {
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    96
                        engineList = "";
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
    97
                        Log.Error("LanguageList: Failed to get list from engine.");
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    98
                    }
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
    99
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   100
                    languages = engineList.Split('\n');
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   101
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   102
                    // Go through each language group
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   103
                    for (int i = 0; i < languages.Length; i++)
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   104
                    {
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   105
                        language = languages[i].Split(',');
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   106
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
   107
                        if (language.Length == 3)
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   108
                        {
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   109
                            code = language[0].Trim();
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   110
                            code = code.Replace("\"", "");
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   111
1583
33f126865e01 Initial commit
Thomas
parents: 1580
diff changeset
   112
                            phrase = language[1].Trim();
935
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
   113
                            phrase = phrase.Replace("\"", "");
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
   114
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
   115
                            this._LanguageList.Add(new KeyValuePair<CultureInfo, string>(new CultureInfo(code),
5308aa8494f0 Update language list and trustwords language selection to use latest engine format.
Dean Looyengoed
parents: 933
diff changeset
   116
                                                                                         phrase));
854
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   117
                        }
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   118
                    }
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   119
                }
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   120
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   121
                return (this._LanguageList);
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   122
            }
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   123
        }
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   124
f47d5c915d54 Support changing trustwords language during advanced handshake.
Dean Looyengoed
parents: 853
diff changeset
   125
        /// <summary>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   126
        /// Gets the static pEp engine reference.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   127
        /// </summary>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   128
        internal static pEpEngine PEPEngine
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   129
        {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   130
            get
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   131
            {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   132
                if (ThisAddIn._PEPEngine == null)
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   133
                {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   134
                    try
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   135
                    {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   136
                        ThisAddIn._PEPEngine = new pEpEngine();
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   137
                    }
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   138
                    catch (Exception ex)
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   139
                    {
1987
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
   140
                        // As Globals.StopAndSendCrashReport below internally tries to access the engine
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
   141
                        // several times, we need to prevent infinite recursion in case of engine
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
   142
                        // initializaition failure.
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
   143
                        if (_PEPEngineException != null)
2003
c0dfc0f23c17 Use PEPSettings to check for own identities and always use a userId
Thomas
parents: 1992
diff changeset
   144
                            return null;
1987
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
   145
                        _PEPEngineException = ex;
6bda709ddb91 COM-49: When system.db is missing, adapter keeps restaring in a loop with no error message.
Markus Schaber <markus@pep-security.net>
parents: 1986
diff changeset
   146
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   147
                        string summaryMessage = Properties.Resources.Message_InitError + " " +
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   148
                                                Properties.Resources.Message_Reinstall;
860
ff259b6535c7 Merge 'Global' and 'Globals' together.
Dean Looyengoed
parents: 859
diff changeset
   149
                        Globals.StopAndSendCrashReport(ex, summaryMessage, false, true);
460
690f8853d7ae Start to implement the global exception handler in ThisAddIn.
Dean Looyengoed
parents: 455
diff changeset
   150
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   151
                        return (null);
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   152
                    }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   153
                }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   154
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   155
                return (ThisAddIn._PEPEngine);
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   156
            }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   157
        }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   158
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   159
        /// <summary>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   160
        /// Gets the root folder of the pEp data store.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   161
        /// This is primarily used to save unencrypted outlook mail items (mirrors).
1115
f152a1ffe405 Rename 'pEp' to 'PEPEngine' and 'TempFolder' to 'PEPStoreRootFolder' in ThisAddIn.
Dean
parents: 1114
diff changeset
   162
        /// </summary>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   163
        internal Outlook.Folder PEPStoreRootFolder
1115
f152a1ffe405 Rename 'pEp' to 'PEPEngine' and 'TempFolder' to 'PEPStoreRootFolder' in ThisAddIn.
Dean
parents: 1114
diff changeset
   164
        {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   165
            get { return (this._PEPStoreRootFolder); }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   166
        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   167
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   168
        /// <summary>
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   169
        /// Gets the current pEp settings for the add-in.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   170
        /// </summary>
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   171
        internal PEPSettings Settings
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   172
        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   173
            get { return (this._Settings); }
1090
6234a0b9c6a8 Add PEPSettings class and move all add-in configuration into it.
Dean
parents: 1082
diff changeset
   174
        }
6234a0b9c6a8 Add PEPSettings class and move all add-in configuration into it.
Dean
parents: 1082
diff changeset
   175
1770
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   176
        /// <summary>
1948
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   177
        /// Gets the Outlook options set in the program.
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   178
        /// </summary>
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   179
        internal OutlookOptions OutlookOptions
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   180
        {
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   181
            get { return (this._OutlookOptions); }
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   182
        }
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   183
be0dd58ec451 OUT-370: Add OutlookOptions and read them from registry.
Thomas
parents: 1944
diff changeset
   184
        /// <summary>
1770
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   185
        /// Gets the decryption stack.
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   186
        /// </summary>
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   187
        internal static DecryptionStack DecryptionStack
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   188
        {
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   189
            get
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   190
            {
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   191
                if (ThisAddIn._DecryptionStack == null)
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   192
                {
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   193
                    ThisAddIn._DecryptionStack = new DecryptionStack();
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   194
                }
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   195
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   196
                return ThisAddIn._DecryptionStack;
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   197
            }
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   198
        }
5cae62d6ad4c Move decryption stack to own class
Thomas
parents: 1764
diff changeset
   199
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   200
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   201
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   202
         * Methods
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   203
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   204
         *************************************************************/
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   205
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   206
        /// <summary>
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   207
        /// Required override to add ribbon extensions.
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   208
        /// </summary>
326
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   209
        protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   210
        {
340
ded73ac01f51 Implement the send unencrypted option in the ribbon.
Dean Looyengoed
parents: 335
diff changeset
   211
            return new RibbonCustomizations();
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   212
        }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   213
1734
aad357d2f2f0 OUT-285: Limit automatically triggered decryptions (through new mail events) to 5 at a time
Thomas
parents: 1718
diff changeset
   214
        /// <summary>
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   215
        /// This updates the accounts list in pEp settings with the ones found in Outlook, adding new accounts and removing
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   216
        /// all accounts that are not there anymore.
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   217
        /// </summary>
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   218
        internal void SyncAccountsList()
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   219
        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   220
            bool exists;
1556
2687fc205e9c OUT-200: Ask user whether to sync a new account or not
Thomas
parents: 1555
diff changeset
   221
            string dialogMessage = string.Empty;
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   222
            Outlook.NameSpace ns = null;
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   223
            Outlook.Account account = null;
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   224
            Outlook.Accounts accounts = null;
1564
aee92531fdc3 Add extensive logging to startup and some simplification
Thomas
parents: 1561
diff changeset
   225
            PEPSettings.PEPAccountSettings acctSettings;
1580
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   226
            NewAccountEventArgs args;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   227
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   228
            try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   229
            {
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   230
                ns = Application.Session;
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   231
                accounts = ns?.Accounts;
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   232
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   233
                if (this._Settings != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   234
                {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   235
                    // Add any new Outlook accounts to the account settings list
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   236
                    for (int i = 1; i <= accounts.Count; i++)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   237
                    {
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   238
                        account = accounts[i];
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   239
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   240
                        if (string.IsNullOrWhiteSpace(account.SmtpAddress) == false)
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   241
                        {
1564
aee92531fdc3 Add extensive logging to startup and some simplification
Thomas
parents: 1561
diff changeset
   242
                            // Check if it is already in the list
aee92531fdc3 Add extensive logging to startup and some simplification
Thomas
parents: 1561
diff changeset
   243
                            if (this._Settings.GetAccountSettings(account.SmtpAddress) == null)
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   244
                            {
2058
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   245
                                // Create pEp settings for the new account
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   246
                                account.CreatePEPSettings();
1580
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   247
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   248
                                // Raise the new account event
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   249
                                args = new NewAccountEventArgs();
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   250
                                args.AccountType = account.AccountType;
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   251
                                args.DisplayName = account.DisplayName;
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   252
                                args.SmtpAddress = account.SmtpAddress;
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   253
                                args.UserName = account.UserName;
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   254
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   255
                                this.NewAccount?.Invoke(this, args);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   256
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   257
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   258
                        else
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   259
                        {
1350
8fdce6140e29 Change more places to .net standard capitalization rules.
Dean
parents: 1349
diff changeset
   260
                            Log.Warning("SyncWithSettings: Invalid Smtp address detected, skipping account.");
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   261
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   262
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   263
                        account = null;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   264
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   265
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   266
                    // Remove any entries of the account settings list not in Outlook
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   267
                    // This is needed to skip any entries in the registry that may be invalid, user created, or no longer in Outlook
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   268
                    for (int i = (this._Settings.AccountSettingsList.Count - 1); i >= 0; i--)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   269
                    {
1564
aee92531fdc3 Add extensive logging to startup and some simplification
Thomas
parents: 1561
diff changeset
   270
                        acctSettings = this._Settings.AccountSettingsList[i];
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   271
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   272
                        // Check if it exists in Outlook
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   273
                        exists = false;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   274
                        for (int j = 1; j <= accounts.Count; j++)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   275
                        {
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   276
                            account = accounts[j];
1522
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   277
2058
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   278
                            if ((acctSettings.EqualsByAddress(account.SmtpAddress)) ||
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   279
                                (this._Settings.ExcludeDuringSyncList.Contains(account.SmtpAddress)))
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   280
                            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   281
                                exists = true;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   282
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   283
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   284
                            account = null;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   285
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   286
                            if (exists) { break; }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   287
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   288
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   289
                        // Delete if necessary
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   290
                        if (exists == false)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   291
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   292
                            this._Settings.AccountSettingsList.RemoveAt(i);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   293
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   294
                    }
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   295
                }
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   296
            }
1936
83060fe7965d Renaming enums and exceptions
Thomas
parents: 1933
diff changeset
   297
            catch (Exception ex)
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   298
            {
1936
83060fe7965d Renaming enums and exceptions
Thomas
parents: 1933
diff changeset
   299
                Log.Error("SyncAccountsList: Error occured. " + ex.ToString());
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   300
            }
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   301
            finally
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   302
            {
1992
7d4917d04ccb Modify Registry deletion of unused accounts
Thomas
parents: 1989
diff changeset
   303
                ns = null;
7d4917d04ccb Modify Registry deletion of unused accounts
Thomas
parents: 1989
diff changeset
   304
                account = null;
7d4917d04ccb Modify Registry deletion of unused accounts
Thomas
parents: 1989
diff changeset
   305
                accounts = null;
1557
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   306
            }
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   307
        }
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   308
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   309
        /// <summary>
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   310
        /// Syncronizes the current settings class with the pEp for Outlook instance and the pEp engine.
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   311
        /// Warning: This code should be kept synchronized with the Settings_PropertyChanged event.
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   312
        /// <param name="syncAccountsList">Whether to also update the accounts list in pEp settings. 
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   313
        /// </summary>
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   314
        internal void SyncWithSettings(bool syncAccountsList = false)
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   315
        {
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   316
            bool exists;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   317
            string dialogMessage = string.Empty;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   318
            Outlook.NameSpace ns = null;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   319
            Outlook.Account account = null;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   320
            Outlook.Accounts accounts = null;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   321
            pEpIdentity[] ownIdentities;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   322
            List<KeyValuePair<CultureInfo, string>> languages;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   323
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   324
            try
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   325
            {
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   326
                ns = Application.Session;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   327
                accounts = ns.Accounts;
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   328
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   329
                if (this._Settings != null)
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   330
                {
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   331
                    // Update the Outlook accounts list with the one maintained in pEp settings if needed.
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   332
                    if (syncAccountsList)
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   333
                    {
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   334
                        this.SyncAccountsList();
84c8e24e8fa4 OUT-200: Restructure settings synchronization
Thomas
parents: 1556
diff changeset
   335
                    }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   336
1522
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   337
                    /* Sync the account settings with the engine's own identity flags.
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   338
                     * Warning: RegisterMyself() must already have been called so the engine has all own identities.
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   339
                     * The engine can commonly have more own identities than what is in the accounts list.
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   340
                     * This isn't a problem though and engine-only identities will not be changed here.
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   341
                     */
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   342
                    ownIdentities = ThisAddIn.PEPEngine.OwnIdentitiesRetrieve();
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   343
                    foreach (PEPSettings.PEPAccountSettings acctSettings in this._Settings.AccountSettingsList)
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   344
                    {
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   345
                        // Find the own identity that matches with the account settings
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   346
                        foreach (pEpIdentity ident in ownIdentities)
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   347
                        {
1522
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   348
                            pEpIdentity ownIdent = ident;
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   349
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   350
                            if (acctSettings.EqualsByAddress(ownIdent.Address))
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   351
                            {
1576
e86332ff82fc OUT-209: Add disable key sync for all accounts option
Thomas
parents: 1575
diff changeset
   352
                                // Sync the engine's own identity flags with the account or global settings
1577
e1fc661de901 OUT-209: Adjust design to new specs.
Thomas
parents: 1576
diff changeset
   353
                                if (this._Settings.IsSyncEnabledForAllAccounts)
1576
e86332ff82fc OUT-209: Add disable key sync for all accounts option
Thomas
parents: 1575
diff changeset
   354
                                {
1577
e1fc661de901 OUT-209: Adjust design to new specs.
Thomas
parents: 1576
diff changeset
   355
                                    if (ownIdent.GetIsSyncEnabled() == false)
1576
e86332ff82fc OUT-209: Add disable key sync for all accounts option
Thomas
parents: 1575
diff changeset
   356
                                    {
1577
e1fc661de901 OUT-209: Adjust design to new specs.
Thomas
parents: 1576
diff changeset
   357
                                        ThisAddIn.PEPEngine.UnsetIdentityFlags(ref ownIdent, pEpIdentityFlags.pEpIdfNotForSync);
1576
e86332ff82fc OUT-209: Add disable key sync for all accounts option
Thomas
parents: 1575
diff changeset
   358
                                    }
e86332ff82fc OUT-209: Add disable key sync for all accounts option
Thomas
parents: 1575
diff changeset
   359
                                }
e86332ff82fc OUT-209: Add disable key sync for all accounts option
Thomas
parents: 1575
diff changeset
   360
                                else if (ownIdent.GetIsSyncEnabled() != acctSettings.IsSyncEnabled)
1522
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   361
                                {
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   362
                                    if (acctSettings.IsSyncEnabled)
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   363
                                    {
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   364
                                        ThisAddIn.PEPEngine.UnsetIdentityFlags(ref ownIdent, pEpIdentityFlags.pEpIdfNotForSync);
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   365
                                    }
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   366
                                    else
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   367
                                    {
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   368
                                        ThisAddIn.PEPEngine.SetIdentityFlags(ref ownIdent, pEpIdentityFlags.pEpIdfNotForSync);
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   369
                                    }
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   370
                                }
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   371
                                break;
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   372
                            }
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   373
                        }
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   374
                    }
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   375
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   376
                    // Sync IsKeyServerUsed with engine
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   377
                    if (this._Settings.IsKeyServerUsed)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   378
                    {
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
   379
                        ThisAddIn.PEPEngine.StartKeyserverLookup();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   380
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   381
                    else
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   382
                    {
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
   383
                        ThisAddIn.PEPEngine.StopKeyserverLookup();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   384
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   385
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   386
                    // Sync IsPassiveModeEnabled with engine
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
   387
                    ThisAddIn.PEPEngine.PassiveMode(this._Settings.IsPassiveModeEnabled);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   388
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   389
                    // Sync IsPEPFolderVisible with Outlook
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   390
                    this.SetPEPStoreRootFolderVisibility(this._Settings.IsPEPFolderVisible);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   391
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   392
                    // Sync IsUnencryptedSubjectEnabled with engine
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
   393
                    ThisAddIn.PEPEngine.UnencryptedSubject(this._Settings.IsUnencryptedSubjectEnabled);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   394
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   395
                    // Sync IsVerboseLoggingEnabled with engine
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
   396
                    ThisAddIn.PEPEngine.VerboseLogging(this._Settings.IsVerboseLoggingEnabled);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   397
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   398
                    // Sync TrustwordsCulture with engine
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   399
                    if (this._Settings.TrustwordsCulture != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   400
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   401
                        // Validate it exists in the engine list
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   402
                        exists = false;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   403
                        languages = this.LanguageList;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   404
                        foreach (KeyValuePair<CultureInfo, string> entry in languages)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   405
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   406
                            if (entry.Key.LCID == this._Settings.TrustwordsCulture.LCID)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   407
                            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   408
                                exists = true;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   409
                                break;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   410
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   411
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   412
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   413
                        if (exists == false)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   414
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   415
                            // Reset to default
1351
80e7cec5b7cc Select the default trustwords language as the UI language.
Dean
parents: 1350
diff changeset
   416
                            this._Settings.TrustwordsCulture = this.GetActiveUICulture();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   417
                            Log.Warning("SyncWithSettings: Invalid TrustwordsCulture detected, setting to default.");
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   418
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   419
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   420
                    else
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   421
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   422
                        // Reset to default
1351
80e7cec5b7cc Select the default trustwords language as the UI language.
Dean
parents: 1350
diff changeset
   423
                        this._Settings.TrustwordsCulture = this.GetActiveUICulture();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   424
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   425
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   426
            }
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   427
            catch (Exception ex)
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   428
            {
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   429
                Log.Error("SyncWithSettings: Failure occured, " + ex.ToString());
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   430
            }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   431
            finally
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   432
            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   433
                if (ns != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   434
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   435
                    // Marshal.ReleaseComObject(ns);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   436
                    ns = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   437
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   438
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   439
                if (account != null)
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   440
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   441
                    // Marshal.ReleaseComObject(account);
1499
c64aee1cce18 OUT-170: Make SyncWithSettings() update own identity flags in the engine.
Dean
parents: 1498
diff changeset
   442
                    account = null;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   443
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   444
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   445
                if (accounts != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   446
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   447
                    // Marshal.ReleaseComObject(accounts);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   448
                    accounts = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   449
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   450
            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   451
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   452
            return;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   453
        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   454
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   455
        /// <summary>
1441
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   456
        /// Compares the given settings with the current state of Outlook and detects any changes.
1580
8260c64f4aae Small restructuring in startup
Thomas
parents: 1578
diff changeset
   457
        /// This is currently only used to identify first startup.
1441
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   458
        /// </summary>
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   459
        /// <param name="lastSettings">The last settings to compare with. 
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   460
        /// This should be the settings just loaded from the registry at startup (last saved settings).</param>
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   461
        private void DetectChangesFromLastSettings(PEPSettings lastSettings)
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   462
        {
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   463
            // Detect first startup
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   464
            if (lastSettings.IsFirstStartupComplete == false)
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   465
            {
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   466
                this.FirstStartup?.Invoke(this, new EventArgs());
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   467
            }
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   468
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   469
            return;
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   470
        }
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   471
5d86ae076016 Add custom FirstStartup and NewAccount events to ThisAddIn.
Dean
parents: 1438
diff changeset
   472
        /// <summary>
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   473
        /// Detects and disables GPG for Windows GpgOL Outlook add-in.
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   474
        /// </summary>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   475
        /// <returns>True if the GpgOL add-in was disabled.</returns>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   476
        private bool DisableGpgOL()
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   477
        {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   478
            bool wasDisabled = false;
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   479
            Office.COMAddIns comAddIns = null;
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   480
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   481
            try
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   482
            {
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   483
                comAddIns = Globals.ThisAddIn.Application.COMAddIns;
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   484
                foreach (Office.COMAddIn addin in comAddIns)
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   485
                {
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   486
                    if (string.Equals(addin.Description, "GpgOL - The GnuPG Outlook Plugin", StringComparison.OrdinalIgnoreCase))
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   487
                    {
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   488
                        addin.Connect = false;
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   489
                        wasDisabled = true;
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   490
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   491
                        Log.Info("DisableGpgOL: GpgOL was detected and disabled.");
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   492
                    }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   493
                }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   494
            }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   495
            catch (Exception ex)
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   496
            {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   497
                Log.Error("DisableGpgOL: Error trying to disable GpgOL, " + ex.ToString());
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   498
            }
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   499
            finally
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   500
            {
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   501
                if (comAddIns != null)
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   502
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   503
                    // Marshal.ReleaseComObject(comAddIns);
830
592efb9cf41d Handle and log errors in DisableGpgOL method.
Dean Looyengoed
parents: 820
diff changeset
   504
                    comAddIns = null;
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   505
                }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   506
            }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   507
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   508
            return (wasDisabled);
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   509
        }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   510
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   511
        /// <summary>
1497
50187f1f8ecf Rework RegisterMyself() to handle exceptions by itself.
Dean
parents: 1491
diff changeset
   512
        /// Registers each own identity in the pEp engine.
50187f1f8ecf Rework RegisterMyself() to handle exceptions by itself.
Dean
parents: 1491
diff changeset
   513
        /// An own identity represents each account in Outlook.
361
bbe04f85ac03 Updates to the get my identity methods adding the ability to get my identity from a mail item.
Dean Looyengoed
parents: 342
diff changeset
   514
        /// </summary>
910
9bd60ca2c6ac Add offline support (mostly for Exchange accounts).
Dean Looyengoed
parents: 902
diff changeset
   515
        internal void RegisterMyself()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   516
        {
2003
c0dfc0f23c17 Use PEPSettings to check for own identities and always use a userId
Thomas
parents: 1992
diff changeset
   517
            if (Globals.ThisAddIn.Settings.AccountSettingsList != null)
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   518
            {
2058
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   519
                foreach (var acctSettings in Globals.ThisAddIn.Settings.AccountSettingsList)
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   520
                {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   521
                    this.RegisterMyself(acctSettings);
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   522
                }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   523
            }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   524
        }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   525
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   526
        /// <summary>
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   527
        /// Registers a pEpIdentity in the pEp engine.
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   528
        /// </summary>
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   529
        internal void RegisterMyself(PEPSettings.PEPAccountSettings acctSettings)
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   530
        {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   531
            pEpIdentity ownIdentity;
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   532
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   533
            if (acctSettings != null)
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   534
            {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   535
                // Create pEpIdentity
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   536
                ownIdentity = new pEpIdentity
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   537
                {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   538
                    Address = acctSettings.SmtpAddress,
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   539
                    UserId = PEPSettings.PEP_OWN_USER_ID,
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   540
                    UserName = acctSettings.UserName
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   541
                };
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   542
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   543
                // Add to userId cache
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   544
                this.userIdCache[ownIdentity.Address] = ownIdentity.UserId;
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   545
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   546
                // Set not for sync flag if necessary
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   547
                if ((acctSettings.Type.Contains("Imap")) ||
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   548
                    ((Globals.ThisAddIn.Settings.IsSyncEnabledForAllAccounts == false) &&
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   549
                     (acctSettings.IsSyncEnabled == false)))
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   550
                {
2058
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   551
                    ownIdentity.Flags = pEpIdentityFlags.pEpIdfNotForSync;
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   552
                }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   553
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   554
                // Log information if invalid
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   555
                if (string.IsNullOrWhiteSpace(ownIdentity.Address))
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   556
                {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   557
                    Log.Warning("RegisterMyself: Myself doesn't have an address.");
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   558
                }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   559
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   560
                if (string.IsNullOrWhiteSpace(ownIdentity.UserName))
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   561
                {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   562
                    Log.Warning("RegisterMyself: Myself doesn't have a user name.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   563
                }
2058
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   564
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   565
                /* Call engine to register myself (doesn't matter if already done in a past instance)
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   566
                 * Note that key generation can take place during the call to Myself if it's a new installation
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   567
                 * and the engine is unable to elect a key. In this situation key generation can take some time.
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   568
                 * It takes long-enough for the call to the adapter to timeout here and throw an exception.
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   569
                 * However, since the fingerprint of the own identity is not actually needed here, the assumption is 
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   570
                 * made that the engine will be OK and continue processing.
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   571
                 * The exception is simply ignored and we go to the next identity. 
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   572
                 */
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   573
                try
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   574
                {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   575
                    ThisAddIn.PEPEngine.Myself(ownIdentity);
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   576
                }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   577
                catch (COMException ex)
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   578
                {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   579
                    Log.Warning("RegisterMyself: Engine returned exception, " + ex.ToString());
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   580
                }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   581
            }
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   582
            else
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   583
            {
ecee220c7d7d OUT-417: Detect new account during message creation.
Thomas
parents: 2053
diff changeset
   584
                Log.Error("RegisterMyself: account settings are null.");
1497
50187f1f8ecf Rework RegisterMyself() to handle exceptions by itself.
Dean
parents: 1491
diff changeset
   585
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   586
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   587
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   588
        /// <summary>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   589
        /// Gets the pEp user ID for the given address and contact.
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   590
        /// </summary>
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   591
        /// <param name="address">The address to get the user ID for.</param>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   592
        /// <param name="contact">The contact associated with the address (if any).
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   593
        /// This value can be null and is not required for 'myself' user IDs.</param>
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   594
        /// <returns>The user ID (Outlook EntryID) for the given address</returns>
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   595
        internal string GetUserId(string address,
2004
fef678d01f1f Add creation of contacts if needed
Thomas
parents: 2003
diff changeset
   596
                                  Outlook.ContactItem contact = null)
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   597
        {
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   598
            string id = null;
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   599
            Outlook.Folder contactFolder = null;
507
d0b1586c5235 Add fallback to GetUserID that searches address book entry-by-entry.
Dean Looyengoed
parents: 502
diff changeset
   600
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   601
            try
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   602
            {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   603
                if (string.IsNullOrEmpty(address) == false)
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   604
                {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   605
                    // Search cache
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   606
                    if (id == null)
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   607
                    {
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   608
                        try
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   609
                        {
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   610
                            id = this.userIdCache[address];
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   611
                        }
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   612
                        catch
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   613
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   614
                            id = null;
510
500cb064737d Remove try/catch around GetUserID that could hide errors.
Dean Looyengoed
parents: 508
diff changeset
   615
                        }
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   616
                    }
477
23462dc9e619 Release COM objects in GetUserID.
Dean Looyengoed
parents: 475
diff changeset
   617
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   618
                    // Handle myself user ID calculation
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   619
                    if (id == null)
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   620
                    {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   621
                        // Check if the address is myself
910
9bd60ca2c6ac Add offline support (mostly for Exchange accounts).
Dean Looyengoed
parents: 902
diff changeset
   622
                        if (PEPIdentity.GetIsOwnIdentity(address))
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   623
                        {
2003
c0dfc0f23c17 Use PEPSettings to check for own identities and always use a userId
Thomas
parents: 1992
diff changeset
   624
                            id = PEPSettings.PEP_OWN_USER_ID;
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   625
                            this.userIdCache[address] = id;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   626
                        }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   627
                    }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   628
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   629
                    // Use a contact EntryID if available
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   630
                    if ((id == null) &&
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   631
                        (contact != null))
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   632
                    {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   633
                        try
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   634
                        {
2004
fef678d01f1f Add creation of contacts if needed
Thomas
parents: 2003
diff changeset
   635
                            id = contact.EntryID;
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   636
                            this.userIdCache[address] = id;
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   637
                        }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   638
                        catch
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   639
                        {
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   640
                            Log.Error("GetUserId: Attempted to use contact but failed.");
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   641
                        }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   642
                    }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   643
                }
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   644
            }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   645
            catch (Exception ex)
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   646
            {
860
ff259b6535c7 Merge 'Global' and 'Globals' together.
Dean Looyengoed
parents: 859
diff changeset
   647
                Globals.StopAndSendCrashReport(ex);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   648
            }
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   649
            finally
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   650
            {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   651
                if (contactFolder != null)
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   652
                {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   653
                    Marshal.FinalReleaseComObject(contactFolder);
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   654
                    contactFolder = null;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   655
                }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   656
            }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   657
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   658
            return (id);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   659
        }
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   660
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   661
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   662
        /// Create a new Outlook MailItem from the given PEPMessage and send it.
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   663
        /// The sent message will not be processed by the 'Application_ItemSend' event.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   664
        /// WARNING: Exchange ActiveSync accounts ignore the deleteAfterSend parameter (always false).
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   665
        /// </summary>
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   666
        /// <param name="message">The message to send.</param>
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   667
        /// <param name="deleteAfterSend">Whether the message is deleted after sending (true) or a copy is saved (false).</param>
1455
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   668
        /// <param name="validateSendingAccount">Validates that the SendingAccount matches the From identity of the given message.
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   669
        /// This can catch situations (and throw exceptions) where the default account would be used instead.</param>
1833
45ccf9517e8e Add dedicated decryption task for FPP messages
Thomas
parents: 1823
diff changeset
   670
        /// <param name="processMessage">Whether or not to process this message through the pEp engine.</param>
45ccf9517e8e Add dedicated decryption task for FPP messages
Thomas
parents: 1823
diff changeset
   671
        internal void CreateAndSendMessage(PEPMessage message,
45ccf9517e8e Add dedicated decryption task for FPP messages
Thomas
parents: 1823
diff changeset
   672
                                           bool deleteAfterSend,
45ccf9517e8e Add dedicated decryption task for FPP messages
Thomas
parents: 1823
diff changeset
   673
                                           bool validateSendingAccount,
45ccf9517e8e Add dedicated decryption task for FPP messages
Thomas
parents: 1823
diff changeset
   674
                                           bool processMessage = false)
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   675
        {
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   676
            Outlook.MailItem newItem;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   677
            Globals.ReturnStatus sts;
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   678
1833
45ccf9517e8e Add dedicated decryption task for FPP messages
Thomas
parents: 1823
diff changeset
   679
            this.isItemSendHandlerEnabled = processMessage;
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   680
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   681
            try
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   682
            {
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   683
                newItem = Application.CreateItem(Outlook.OlItemType.olMailItem);
1467
622a86775584 OUT-167: Make sure to set SendUsingAccount during SendWithoutProcessing.
Thomas
parents: 1465
diff changeset
   684
622a86775584 OUT-167: Make sure to set SendUsingAccount during SendWithoutProcessing.
Thomas
parents: 1465
diff changeset
   685
                /* Notes:
622a86775584 OUT-167: Make sure to set SendUsingAccount during SendWithoutProcessing.
Thomas
parents: 1465
diff changeset
   686
                 * Do NOT include internal Header Fields (MAPI properties) on outgoing messages!
622a86775584 OUT-167: Make sure to set SendUsingAccount during SendWithoutProcessing.
Thomas
parents: 1465
diff changeset
   687
                 * The sender must be set from the from identity (setSender=true)
622a86775584 OUT-167: Make sure to set SendUsingAccount during SendWithoutProcessing.
Thomas
parents: 1465
diff changeset
   688
                 */
622a86775584 OUT-167: Make sure to set SendUsingAccount during SendWithoutProcessing.
Thomas
parents: 1465
diff changeset
   689
                sts = message.ApplyTo(newItem, false, true);
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   690
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   691
                if (sts == Globals.ReturnStatus.Success)
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   692
                {
1455
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   693
                    // Check that the sending account is the From identity
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   694
                    if ((validateSendingAccount) &&
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   695
                        (message.From != null))
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   696
                    {
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   697
                        if (message.From.EqualsByAddress(newItem.GetSendUsingAccountIdentity()) == false)
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   698
                        {
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   699
                            throw new Exception("Sending account does not match from identity");
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   700
                        }
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   701
                    }
8df403ec31ee OUT-167: Detect anytime From/SendingAccount != To recipient in keysync.
Dean
parents: 1454
diff changeset
   702
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   703
                    // Do not allow TNEF/RTF format with 'winmail.dat' attachment
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   704
                    MapiHelper.SetProperty(newItem, MapiProperty.PidLidUseTnef, false);
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   705
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   706
                    /* Send
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   707
                     * 
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   708
                     * Note: For ActiveSync accounts, the DeleteAfterSubmit property is ignored.
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   709
                     * This means the message will always appear in the sent folder by default.
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   710
                     * The reason for this is unknown.
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   711
                     * 
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   712
                     * It's possible this is related to the ActiveSync specification version
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   713
                     * and therefore may behave differently depending on Outlook version.
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   714
                     * More research is needed here.
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   715
                     */
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   716
                    newItem.DeleteAfterSubmit = deleteAfterSend;
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   717
                    ((Outlook._MailItem)newItem).Send();
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   718
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   719
                    newItem = null;
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   720
                }
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   721
                else
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   722
                {
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   723
                    newItem.PermanentlyDelete();
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   724
                    newItem = null;
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   725
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   726
                    throw new Exception("Failed to create MailItem to send");
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   727
                }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   728
            }
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   729
            catch
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   730
            {
1822
5164def51fea Attach public key to initial message
Thomas
parents: 1820
diff changeset
   731
                throw new Exception("CreateMessageAndSend: Failed to send MailItem.");
1394
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   732
            }
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   733
            finally
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   734
            {
1fb7ea1e40ba OUT-17: Disable Application_ItemSend when within the SendWithoutProcessing method.
Dean
parents: 1390
diff changeset
   735
                this.isItemSendHandlerEnabled = true;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   736
            }
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   737
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   738
            return;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   739
        }
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   740
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   741
        /// <summary>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   742
        /// Create a new 'sent' Outlook MailItem and place it in the given store.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   743
        /// WARNING: Exchange ActiveSync accounts are not supported by this method. The sent
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   744
        /// message will always appear in the drafts folder.
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   745
        /// </summary>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   746
        /// <param name="sendingStore">The store to save the sent message to.</param>
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   747
        /// <param name="acctSettings">The sending account settings.</param>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   748
        /// <param name="sentMessage">The message that is sent.</param>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   749
        /// <param name="storedRating">The rating to store to the sent message mail item.
970
d676bc7cbad6 Store the outgoing color rating for sent messages where possible.
Dean Looyengoed
parents: 935
diff changeset
   750
        /// Will only be set if not undefined (default). Warning: Only use this on trusted servers.</param>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   751
        private void CreateNewSentMail(Outlook.Store sendingStore,
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   752
                                       PEPSettings.PEPAccountSettings acctSettings,
970
d676bc7cbad6 Store the outgoing color rating for sent messages where possible.
Dean Looyengoed
parents: 935
diff changeset
   753
                                       PEPMessage sentMessage,
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
   754
                                       pEpRating storedRating = pEpRating.pEpRatingUndefined)
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   755
        {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   756
            Int32 messageFlags;
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   757
            Outlook.MailItem sentMailItem = null;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   758
            Outlook.Folder sentFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   759
            Outlook.NameSpace ns = Application.Session;
1511
9f431f11aaf5 we definitely need an address
Volker Birk <vb@pep-project.org>
parents: 1510
diff changeset
   760
            Outlook.Folder rootFolder = null;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   761
            Outlook.Folders folders = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   762
            Outlook.Folder folder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   763
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   764
            /* The process is:
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   765
             * 1. Use the Store.GetDefaultFolder(olFolderSentMail) to try to get the default Sent folder. 
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   766
             *    However, this can fail for a number of reasons, depending on server and folder configuration.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   767
             * 2. As a fallback, search for the Sent folder by matching the Sent folder Entry ID
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   768
             *    However, this can also fail if no Sent folder Entry ID has been recorded.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   769
             * 3. As another fallback, search by Folder name ("SENT") for an existing Sent folder
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   770
             *    If found, record the folder's Entry ID. If not, goto point 4.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   771
             * 4. If everything of the above fails, create a new Sent folder and record the Entry ID.     
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   772
             */
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   773
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   774
            try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   775
            {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   776
                if ((sendingStore != null) &&
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   777
                    (acctSettings != null) &&
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   778
                    (sentMessage != null))
1108
47880211c601 OUT-55: Initial fix for missing sent messages
Thomas
parents: 1096
diff changeset
   779
                {
1522
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
   780
                    rootFolder = (Outlook.Folder)sendingStore.GetRootFolder();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   781
                    if (rootFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   782
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   783
                        folders = rootFolder.Folders;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   784
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   785
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   786
                    // Step 1
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   787
                    try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   788
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   789
                        sentFolder = (Outlook.Folder)sendingStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   790
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   791
                    catch
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   792
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   793
                        if (sentFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   794
                        {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   795
                            // Marshal.ReleaseComObject(sentFolder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   796
                            sentFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   797
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   798
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   799
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   800
                    // Step 2
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   801
                    if (sentFolder == null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   802
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   803
                        try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   804
                        {
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   805
                            /* Search for folder by entry ID
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   806
                             * Normally, the way to go would be the following line:
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   807
                             * sentFolder = (Outlook.Folder)ns.GetItemFromID(acctSettings.SentFolderEntryId, sendingStore.StoreID);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   808
                             * However, for some reason, this can come up with the following error: "Could not open the item. Try again."
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   809
                             * Therefore, the below solution is used:
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   810
                             */
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   811
                            if (folders != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   812
                            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   813
                                for (int i = 1; i <= folders.Count; i++)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   814
                                {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   815
                                    folder = (Outlook.Folder)folders[i];
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   816
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   817
                                    if (folder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   818
                                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   819
                                        if ((string.IsNullOrEmpty(folder.EntryID) == false) &&
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   820
                                            (string.Equals(folder.EntryID, acctSettings.SentFolderEntryId)))
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   821
                                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   822
                                            sentFolder = folder;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   823
                                            break;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   824
                                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   825
1516
0a838ded02dd comment out all ReleaseComObject()
Volker Birk <vb@pep-project.org>
parents: 1511
diff changeset
   826
                                        // Marshal.ReleaseComObject(folder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   827
                                        folder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   828
                                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   829
                                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   830
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   831
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   832
                        catch
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   833
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   834
                            if (sentFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   835
                            {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   836
                                // Marshal.ReleaseComObject(sentFolder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   837
                                sentFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   838
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   839
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   840
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   841
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   842
                    // Step 3
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   843
                    if (sentFolder == null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   844
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   845
                        try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   846
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   847
                            //Search for folder by name
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   848
                            if (folders != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   849
                            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   850
                                for (int i = 1; i <= folders.Count; i++)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   851
                                {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   852
                                    folder = (Outlook.Folder)folders[i];
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   853
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   854
                                    if (folder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   855
                                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   856
                                        if ((string.IsNullOrEmpty(folder.Name) == false) &&
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   857
                                            (folder.Name.Trim().StartsWith(Globals.CUSTOM_SENT_FOLDER_NAME, StringComparison.OrdinalIgnoreCase)))
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   858
                                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   859
                                            sentFolder = folder;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   860
                                            break;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   861
                                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   862
1516
0a838ded02dd comment out all ReleaseComObject()
Volker Birk <vb@pep-project.org>
parents: 1511
diff changeset
   863
                                        // Marshal.ReleaseComObject(folder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   864
                                        folder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   865
                                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   866
                                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   867
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   868
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   869
                        catch
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   870
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   871
                            if (sentFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   872
                            {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   873
                                // Marshal.ReleaseComObject(sentFolder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   874
                                sentFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   875
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   876
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   877
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   878
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   879
                    // Step 4
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   880
                    if (sentFolder == null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   881
                    {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   882
                        try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   883
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   884
                            // Create folder
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   885
                            if (folders != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   886
                            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   887
                                sentFolder = (Outlook.Folder)folders.Add(Globals.CUSTOM_SENT_FOLDER_NAME);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   888
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   889
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   890
                        catch (Exception ex)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   891
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   892
                            if (sentFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   893
                            {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   894
                                // Marshal.ReleaseComObject(sentFolder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   895
                                sentFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   896
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   897
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   898
                            Log.Error("CreateNewSentMail: No Sent folder found and no new Sent folder could be created because of the following error: " + ex.ToString());
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   899
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   900
                    }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   901
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   902
                    if (sentFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   903
                    {
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
   904
                        acctSettings.SentFolderEntryId = sentFolder.EntryID;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   905
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   906
                        // Create the basic sent mail item
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   907
                        sentMailItem = (Outlook.MailItem)sentFolder.Items.Add(Outlook.OlItemType.olMailItem);
1299
523bb6ad5ccc Add setSender parameter to ApplyTo() method and only use it in CreateNewSentMail()
Thomas
parents: 1287
diff changeset
   908
                        sentMessage.ApplyTo(sentMailItem, false, true); // Do NOT include internal Header Fields (MAPI properties)!
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   909
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   910
                        // Set the date and time the mail item was sent
1275
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   911
                        try
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   912
                        {
1350
8fdce6140e29 Change more places to .net standard capitalization rules.
Dean
parents: 1349
diff changeset
   913
                            MapiHelper.SetProperty(sentMailItem, MapiProperty.PidTagClientSubmitTime, DateTime.Now.ToUniversalTime());
1275
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   914
                        }
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   915
                        catch { }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   916
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   917
                        // Set flags
1275
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   918
                        try
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   919
                        {
1350
8fdce6140e29 Change more places to .net standard capitalization rules.
Dean
parents: 1349
diff changeset
   920
                            messageFlags = (System.Int32)MapiHelper.GetProperty(sentMailItem, MapiProperty.PidTagMessageFlags);
8fdce6140e29 Change more places to .net standard capitalization rules.
Dean
parents: 1349
diff changeset
   921
                            messageFlags &= ~((System.Int32)MapiPropertyValue.EnumPidTagMessageFlags.mfUnsent);  // Clear UNSENT flag -- must be done before save
8fdce6140e29 Change more places to .net standard capitalization rules.
Dean
parents: 1349
diff changeset
   922
                            messageFlags |= ((System.Int32)MapiPropertyValue.EnumPidTagMessageFlags.mfRead);     // Mark as read
8fdce6140e29 Change more places to .net standard capitalization rules.
Dean
parents: 1349
diff changeset
   923
                            MapiHelper.SetProperty(sentMailItem, MapiProperty.PidTagMessageFlags, messageFlags);
1275
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   924
                        }
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   925
                        catch { }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   926
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   927
                        // Save pEp rating
1275
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   928
                        try
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   929
                        {
1303
5b20f1bee571 Add and implement class for MailItem extension methods.
Dean
parents: 1299
diff changeset
   930
                            sentMailItem.SetPEPProperty(MailItemExtensions.PEPProperty.Rating, storedRating);
1275
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   931
                        }
2a69f2f93ca3 OUT-83: Catch more MAPIProperty.SetProperty errors when creating a new sent message.
Dean
parents: 1271
diff changeset
   932
                        catch { }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   933
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   934
                        // Save changes to the mail item (must be done last for some properties)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   935
                        sentMailItem.Save();
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   936
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   937
                        /* Attempt to move to the sent folder.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   938
                         * For ActiveSync accounts, this will fail with the error:
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   939
                         * 'Sorry, Exchange ActiveSync doesn't support what you're trying to do.'
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   940
                         * This is because the .Items.Add(folder) will ignore the specified folder and create in local Drafts.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   941
                         * Then "Exchange ActiveSync doesn’t support the Drafts folder" so it can't be moved out.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   942
                         * Even in the Outlook UI a draft cannot be 'dragged' out of the drafts folder.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   943
                         */
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   944
                        try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   945
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   946
                            sentMailItem.Move(sentFolder);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   947
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   948
                        catch { }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   949
                    }
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   950
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   951
            }
743
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   952
            catch (Exception ex)
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   953
            {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   954
                Log.Error("CreateNewSentMail: Error occured, " + ex.ToString());
886
7dbe50a11f81 Avoid code analysis warning CA2200.
Dean Looyengoed
parents: 883
diff changeset
   955
                throw;
743
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   956
            }
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   957
            finally
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   958
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   959
                if (sentMailItem != null)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   960
                {
1516
0a838ded02dd comment out all ReleaseComObject()
Volker Birk <vb@pep-project.org>
parents: 1511
diff changeset
   961
                    // Marshal.ReleaseComObject(sentMailItem);
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   962
                    sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   963
                }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   964
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   965
                if (ns != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   966
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   967
                    //Marshal.ReleaseComObject(ns);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   968
                    ns = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   969
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   970
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   971
                if (sentFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   972
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   973
                    //Marshal.ReleaseComObject(sentFolder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   974
                    sentFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   975
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   976
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   977
                if (rootFolder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   978
                {
1507
d315f34fae0b remove a couple of ReleaseComObject() calls
Volker Birk <vb@pep-project.org>
parents: 1503
diff changeset
   979
                    //Marshal.ReleaseComObject(rootFolder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   980
                    rootFolder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   981
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   982
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   983
                if (folders != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   984
                {
1516
0a838ded02dd comment out all ReleaseComObject()
Volker Birk <vb@pep-project.org>
parents: 1511
diff changeset
   985
                    // Marshal.ReleaseComObject(folders);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   986
                    folders = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   987
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   988
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   989
                if (folder != null)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   990
                {
1516
0a838ded02dd comment out all ReleaseComObject()
Volker Birk <vb@pep-project.org>
parents: 1511
diff changeset
   991
                    // Marshal.ReleaseComObject(folder);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   992
                    folder = null;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
   993
                }
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   994
            }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   995
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   996
            return;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   997
        }
1340
9b3c8e11f274 OUT-117: Mostly formatting fixes
Dean
parents: 1337
diff changeset
   998
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   999
        /// <summary>
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1000
        /// Gets whether the given account is trusted (on the account whitelist).
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1001
        /// Character case and whitespace is ignored during comparison.
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1002
        /// </summary>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1003
        /// <param name="address">The address of the account.</param>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1004
        /// <returns>True if the account with the given address is trusted by default (on the whitelist), otherwise false.</returns>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1005
        private bool GetIsAccountTrusted(string address)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1006
        {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1007
            bool isTrusted = false;
1349
77c31d9ef5a6 Switch to .ToUpperInvariant().
Dean
parents: 1348
diff changeset
  1008
            string searchAddress = address.ToUpperInvariant().Trim();
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1009
            string searchDomain = searchAddress.Contains("@") ? searchAddress.Substring(searchAddress.LastIndexOf("@")) : null;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1010
            string whitelistAccount;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1011
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1012
            for (int i = 0; i < this._Settings.AccountWhitelist.Length; i++)
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1013
            {
1349
77c31d9ef5a6 Switch to .ToUpperInvariant().
Dean
parents: 1348
diff changeset
  1014
                whitelistAccount = this._Settings.AccountWhitelist[i].ToUpperInvariant().Trim();
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1015
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1016
                // Check for exact match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1017
                if (searchAddress == whitelistAccount)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1018
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1019
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1020
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1021
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1022
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1023
                // Check for domain match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1024
                if ((searchDomain != null) &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1025
                    whitelistAccount.StartsWith("@") &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1026
                    (searchDomain == whitelistAccount))
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1027
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1028
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1029
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1030
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1031
            }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1032
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1033
            return (isTrusted);
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1034
        }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1035
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
  1036
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1037
        /// Copies any necessary data from the given options form state back into this add-ins current state.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1038
        /// The registry is also updated by this method.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1039
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1040
        /// <param name="state">The state to copy data from.</param>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1041
        internal void SetOptionsState(FormControlOptions.State state)
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1042
        {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1043
            bool isBlacklisted;
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1044
            string fpr1;
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1045
            string fpr2;
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1046
            string[] blacklist;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1047
            PEPSettings.PEPAccountSettings acctSettings;
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1048
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1049
            if (state != null)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1050
            {
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1051
                // Get the blacklist
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1052
                try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1053
                {
1379
bd9b72ad2f54 Spelling correction.
Dean
parents: 1374
diff changeset
  1054
                    blacklist = ThisAddIn.PEPEngine.BlacklistRetrieve();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1055
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1056
                catch (COMException ex)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1057
                {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1058
                    blacklist = new string[0];
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1059
                    Log.Error("SetOptionsState: Error getting blacklist from engine. " + ex.ToString());
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1060
                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1061
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1062
                // Remove any fingerprints no longer in the engine blacklist
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1063
                if (blacklist != null)
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1064
                {
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1065
                    for (int i = (blacklist.Length - 1); i >= 0; i--)
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1066
                    {
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1067
                        fpr1 = this.RemoveFprFormatting(blacklist[i]);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1068
                        isBlacklisted = false;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1069
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1070
                        if (string.IsNullOrEmpty(fpr1) == false)
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1071
                        {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1072
                            // Check if fingerprint is still blacklisted
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1073
                            foreach (KVPair<PEPIdentity, bool> entry in state.Blacklist)
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1074
                            {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1075
                                fpr2 = this.RemoveFprFormatting(entry.Key.Fingerprint);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1076
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1077
                                // Value is true if the entry is blacklisted
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1078
                                if ((string.Equals(fpr1, fpr2, StringComparison.OrdinalIgnoreCase)) &&
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1079
                                    (entry.Value))
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1080
                                {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1081
                                    isBlacklisted = true;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1082
                                    break;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1083
                                }
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1084
                            }
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1085
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1086
                            if (isBlacklisted == false)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1087
                            {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1088
                                try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1089
                                {
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
  1090
                                    ThisAddIn.PEPEngine.BlacklistDelete(fpr1);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1091
                                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1092
                                catch (COMException ex)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1093
                                {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1094
                                    Log.Error("SetOptionsState: Failed to delete blacklist entry, " + ex.ToString());
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1095
                                }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1096
                            }
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1097
                        }
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1098
                    }
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1099
                }
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1100
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1101
                // Add any new fingerprints to the engine blacklist
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1102
                foreach (KVPair<PEPIdentity, bool> entry in state.Blacklist)
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1103
                {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1104
                    fpr1 = this.RemoveFprFormatting(entry.Key.Fingerprint);
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1105
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1106
                    // Value is true if the entry is blacklisted
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1107
                    if ((entry.Value) &&
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1108
                        (string.IsNullOrEmpty(fpr1) == false))
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1109
                    {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1110
                        try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1111
                        {
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
  1112
                            if (ThisAddIn.PEPEngine.BlacklistIsListed(fpr1) == false)
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1113
                            {
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
  1114
                                ThisAddIn.PEPEngine.BlacklistAdd(fpr1);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1115
                            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1116
                        }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1117
                        catch (COMException ex)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1118
                        {
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1119
                            Log.Error("SetOptionsState: Failed to add new blacklist entry, " + ex.ToString());
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1120
                        }
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1121
                    }
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1122
                }
1250
e219136cec9d OUT-87: Complete the new blacklist implementation.
Dean
parents: 1249
diff changeset
  1123
1460
0b65f50c102e OUT-162: OUT-164: OUT-176: Allow managing a separate display state for account options.
Dean
parents: 1455
diff changeset
  1124
                foreach (FormControlOptions.AccountState entry in state.AccountSettingsList)
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1125
                {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1126
                    /* pEp internally uses account types as defined by microsoft.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1127
                     * This means they have 'ol' before the type (Example: 'olImap').
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1128
                     * This isn't always user friendly so for the options UI the 'ol' is removed.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1129
                     * However, when comparing again with the settings list, this 'ol' must be added back.
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1130
                     */
1522
cc9a14ce8514 OUT-170: Exlude identity. Also initial implementation of new NotifyHandshake with synchronization signal.
Thomas
parents: 1519
diff changeset
  1131
                    acctSettings = this._Settings.GetAccountSettings(entry.SmtpAddress);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1132
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1133
                    if (acctSettings != null)
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1134
                    {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1135
                        // Modify existing value
1348
c394606d6f6c Change to .net standard capitalization rules in several places.
Dean
parents: 1347
diff changeset
  1136
                        // The following are skipped: SentFolderEntryId, SmtpAddress & Type
1790
314f3162286c Implement options UI
Thomas
parents: 1784
diff changeset
  1137
                        acctSettings.IsDecryptAlwaysEnabled = entry.IsDecryptAlwaysEnabled;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1138
                        acctSettings.IsPEPEnabled = entry.IsPEPEnabled;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1139
                        acctSettings.IsSecureStorageEnabled = entry.IsSecureStorageEnabled;
1488
cc7028d7409a OUT-170: Add IsSyncEnabled in options and settings.
Dean
parents: 1487
diff changeset
  1140
                        acctSettings.IsSyncEnabled = entry.IsSyncEnabled;
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1141
                    }
1166
5f600ac7b163 Remove 'ol' from account type when displayed in the options UI.
Dean
parents: 1155
diff changeset
  1142
                    else
5f600ac7b163 Remove 'ol' from account type when displayed in the options UI.
Dean
parents: 1155
diff changeset
  1143
                    {
1460
0b65f50c102e OUT-162: OUT-164: OUT-176: Allow managing a separate display state for account options.
Dean
parents: 1455
diff changeset
  1144
                        Log.Warning("SetOptionsState: Existing account settings not found.");
1166
5f600ac7b163 Remove 'ol' from account type when displayed in the options UI.
Dean
parents: 1155
diff changeset
  1145
                    }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1146
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1147
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1148
                this._Settings.IsAutoUpdateEnabled = state.IsAutoUpdateEnabled;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1149
                this._Settings.IsEncryptAllAccountsEnabled = state.IsEncryptAllAccountsEnabled;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1150
                this._Settings.IsKeyServerUsed = state.IsKeyServerUsed;
1314
4b4f0b1943fb OUT-109: Implement option to show/hide the Store Protected button.
Dean
parents: 1304
diff changeset
  1151
                this._Settings.IsNeverUnsecureOptionVisible = state.IsNeverUnsecureOptionVisible;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1152
                this._Settings.IsPEPFolderVisible = state.IsPEPFolderVisible;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1153
                this._Settings.IsSecurityLossWarningEnabled = state.IsSecurityLossWarningEnabled;
1577
e1fc661de901 OUT-209: Adjust design to new specs.
Thomas
parents: 1576
diff changeset
  1154
                this._Settings.IsSyncEnabledForAllAccounts = state.IsSyncEnabledForAllAccounts;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1155
                this._Settings.IsUnencryptedSubjectEnabled = state.IsUnencryptedSubjectEnabled;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1156
                this._Settings.IsVerboseLoggingEnabled = state.IsVerboseLoggingEnabled;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1157
                this._Settings.TrustwordsCulture = ((state.TrustwordsCulture != null) ? new CultureInfo(state.TrustwordsCulture.LCID) : null);
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1158
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1159
                // Save last state for next options opening
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1160
                this.lastOptionsState = state.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1161
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1162
                // Update registry (in case of unforseen app shutdown)
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1163
                this._Settings.SaveToRegistry();
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1164
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1165
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1166
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1167
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1168
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1169
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1170
        /// Builds a new options form state using this add-ins current state.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1171
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1172
        /// <returns>A new options form state.</returns>
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1173
        internal FormControlOptions.State GetOptionsState()
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1174
        {
818
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1175
            bool isDefaultStore = false;
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1176
            bool exists;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1177
            string fpr1;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1178
            string fpr2;
839
a9a34f09b857 Implement blacklist.
Dean Looyengoed
parents: 838
diff changeset
  1179
            string[] blacklist;
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
  1180
            StringPair[] keylist;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1181
            PEPIdentity newIdent;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1182
            PEPSettings.PEPAccountSettings newAcctSettings;
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1183
            FormControlOptions.State state;
919
252172b0fbec Standardize calls to the Session in ThisAddIn.
Dean Looyengoed
parents: 918
diff changeset
  1184
            Outlook.NameSpace ns = this.Application.Session;
818
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1185
            Outlook.Store defaultStore = null;
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1186
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1187
            // Check if pEp is the default store
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1188
            try
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1189
            {
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1190
                defaultStore = ns.DefaultStore;
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1191
                isDefaultStore = (defaultStore.StoreID == this._PEPStoreRootFolder.StoreID);
818
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1192
            }
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1193
            catch
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1194
            {
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1195
                isDefaultStore = false;
27197ae4d497 Add detection if the pEp store is the default and don't allow it to be hidden.
Dean Looyengoed
parents: 816
diff changeset
  1196
            }
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1197
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1198
            // Load from last state if possible
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1199
            if (this.lastOptionsState != null)
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1200
            {
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1201
                state = this.lastOptionsState.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1202
            }
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1203
            else
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1204
            {
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1205
                state = new FormControlOptions.State();
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1206
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1207
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1208
            // Get complete OpenPGP key list
1250
e219136cec9d OUT-87: Complete the new blacklist implementation.
Dean
parents: 1249
diff changeset
  1209
            try
e219136cec9d OUT-87: Complete the new blacklist implementation.
Dean
parents: 1249
diff changeset
  1210
            {
1343
1520e906a692 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1340
diff changeset
  1211
                keylist = ThisAddIn.PEPEngine.OpenPGPListKeyinfo(null);
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1212
            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1213
            catch (COMException ex)
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1214
            {
1337
6b93b1a3b751 OUT-117: Catching up rename-refactorings from COM-24, COM-29, COM-30, COM-31
Markus Schaber <markus@pep-security.net>
parents: 1328
diff changeset
  1215
                keylist = new StringPair[0];
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1216
                Log.Error("GetOptionsState: Error getting OpenPGP keylist from engine. " + ex.ToString());
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1217
            }
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1218
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1219
            // Get the blacklist
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1220
            try
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1221
            {
1379
bd9b72ad2f54 Spelling correction.
Dean
parents: 1374
diff changeset
  1222
                blacklist = ThisAddIn.PEPEngine.BlacklistRetrieve();
931
12659521a856 Catch and report errors when reading the blacklist from the engine.
Dean Looyengoed
parents: 929
diff changeset
  1223
            }
12659521a856 Catch and report errors when reading the blacklist from the engine.
Dean Looyengoed
parents: 929
diff changeset
  1224
            catch (COMException ex)
12659521a856 Catch and report errors when reading the blacklist from the engine.
Dean Looyengoed
parents: 929
diff changeset
  1225
            {
12659521a856 Catch and report errors when reading the blacklist from the engine.
Dean Looyengoed
parents: 929
diff changeset
  1226
                blacklist = new string[0];
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1227
                Log.Error("GetOptionsState: Error getting blacklist from engine. " + ex.ToString());
931
12659521a856 Catch and report errors when reading the blacklist from the engine.
Dean Looyengoed
parents: 929
diff changeset
  1228
            }
12659521a856 Catch and report errors when reading the blacklist from the engine.
Dean Looyengoed
parents: 929
diff changeset
  1229
1382
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1230
            // Add the OpenPGP keylist to the UI blacklist
f37576e7edbb OUT-87: Support adding new fingerprints to the blacklist.
Dean
parents: 1379
diff changeset
  1231
            state.Blacklist.Clear();
1262
92840238d7af Manual merge of ThisAddIn with latest default branch code.
Dean
parents: 1261
diff changeset
  1232
            if (keylist != null)
839