ThisAddIn.cs
author Dean Looyengoed
Wed, 06 Apr 2016 16:14:27 +0200
changeset 776 451e3831822b
parent 773 ab0b1fcf4c61
child 783 88fd783d37f9
permissions -rw-r--r--
Support passing a contact in the GetUserID method. This now uses contacts for consistent user ID calculation when a contact exists.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     1
using Microsoft.Win32;
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;
155
cda43d18bcd3 Add state to handshake form and decouple it from the encryption status panel
Dean Looyengoed
parents: 144
diff changeset
     5
using System.Globalization;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     6
using System.Runtime.InteropServices;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
     7
using System.Security.Cryptography;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
     8
using System.Text;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
     9
using System.Threading;
47
d3b5164cc922 read in extra keys
Volker Birk <vb@pep-project.org>
parents: 46
diff changeset
    10
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
    11
using Office = Microsoft.Office.Core;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    12
using Outlook = Microsoft.Office.Interop.Outlook;
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    13
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    14
namespace pEp
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    15
{
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    16
    public partial class ThisAddIn
6dfec3b090d6 initial commit
vb
parents:
diff changeset
    17
    {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    18
        #region VSTO generated code
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    19
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    20
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    21
        /// Required method for Designer support - do not modify
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    22
        /// the contents of this method with the code editor.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    23
        /// </summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    24
        private void InternalStartup()
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    25
        {
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    26
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    27
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    28
        }
201
9e0548fa3942 Code reformatting.
Markus Schaber <markus@pep-security.net>
parents: 191
diff changeset
    29
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    30
        #endregion
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    31
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    32
        private const string REG_KEY_SOFTWARE                         = "Software";
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    33
        private const string REG_KEY_PEP                              = "pEp";
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
    34
        private const string REG_KEY_MICROSOFT_OFFICE                 = "Microsoft\\Office";
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
    35
        private const string REG_KEY_ENCRYPTED_ACCOUNTS_LIST          = "EncryptedAccountsList";
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
    36
        private const string REG_NAME_ACCOUNT_WHITELIST               = "AccountWhitelist";
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
    37
        private const string REG_NAME_CRASH_REPORT_SEND_ADDRESS       = "CrashReportSendAddress";
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    38
        private const string REG_NAME_EXTRA_KEYS                      = "ExtraKeys";
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    39
        private const string REG_NAME_IS_CRASH_REPORT_VISIBLE         = "IsCrashReportVisible";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    40
        private const string REG_NAME_IS_DEVELOPER_MODE_ENABLED       = "IsDeveloperModeEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    41
        private const string REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED = "IsEncryptAllAccountsEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    42
        private const string REG_NAME_IS_KEY_SERVER_USED              = "IsKeyServerUsed";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    43
        private const string REG_NAME_IS_PASSIVE_MODE_ENABLED         = "IsPassiveModeEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    44
        private const string REG_NAME_IS_TNEF_DISABLED                = "DisableTNEF"; // Name defined by Microsoft
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    45
        private const string REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED  = "IsUnencryptedSubjectEnabled";
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    46
        private const string REG_NAME_IS_VERBOSE_LOGGING_ENABLED      = "IsVerboseLoggingEnabled";
206
630f24c2cd54 Add constants for pEp registry entry names and keys.
Dean Looyengoed
parents: 203
diff changeset
    47
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    48
        private string[]                 _AccountWhitelist            = Global.HARDCODED_ACCOUNT_WHITELIST;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    49
        private string                   _CrashReportSendAddress      = Global.CRASH_REPORT_SEND_ADDRESS_DEFAULT;
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    50
        private Dictionary<string, bool> _EncryptedAccountsList       = new Dictionary<string, bool>();
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    51
        private string[]                 _ExtraKeys                   = null;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    52
        private bool                     _IsCrashReportVisible        = Global.IS_CRASH_REPORT_VISIBLE_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    53
        private bool                     _IsDeveloperModeEnabled      = Global.IS_DEVELOPER_MODE_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    54
        private bool                     _IsEncryptAllAccountsEnabled = Global.IS_ENCRYPT_ALL_ACCOUNTS_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    55
        private bool                     _IsKeyServerUsed             = Global.IS_KEY_SERVER_USED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    56
        private bool                     _IsPassiveModeEnabled        = Global.IS_PASSIVE_MODE_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    57
        private bool                     _IsTNEFDisabled              = Global.IS_TNEF_DISABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    58
        private bool                     _IsUnencryptedSubjectEnabled = Global.IS_UNENCRYPTED_SUBJECT_ENABLED_DEFAULT;
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
    59
        private bool                     _IsVerboseLoggingEnabled     = Global.IS_VERBOSE_LOGGING_ENABLED_DEFAULT;
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    60
        private static pEpEngine         _pEp                         = null;
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
    61
        private Outlook.Folder           _TempFolder                  = null;
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
    62
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    63
        private bool                       initialized      = false;
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    64
        private FormOptions.State          lastOptionsState = null;
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    65
        private List<string>               doNotProcessList = new List<string>();
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
    66
        private Dictionary<string, string> userIDCache      = new Dictionary<string, string>();
750
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
    67
        private List<WatchedFolder>        watchedFolders   = new List<WatchedFolder>();
190
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
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    71
         * Property Accessors
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    72
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    73
         *************************************************************/
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    74
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
    75
        /// <summary>
650
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    76
        /// Gets the account whitelist as the combination of hardcoded and registry values.
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    77
        /// </summary>
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    78
        public string[] AccountWhitelist
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    79
        {
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    80
            get { return (this._AccountWhitelist); }
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    81
        }
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    82
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
    83
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    84
        /// Gets the email address to send any crash report to.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    85
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    86
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    87
        public string CrashReportSendAddress
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    88
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    89
            get { return (this._CrashReportSendAddress); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    90
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    91
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
    92
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    93
        /// Gets the encrypted accounts list (as a dictionary) used to show which accounts are encrypted.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    94
        /// This is only those accounts which existed already in the registry plus any added 
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    95
        /// from saving the options form.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    96
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    97
        public Dictionary<string, bool> EncryptedAccountsList
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    98
        {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
    99
            get { return (this._EncryptedAccountsList); }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   100
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   101
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   102
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   103
        /// Gets any extra encryption keys that were loaded from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   104
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   105
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   106
        public string[] ExtraKeys
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   107
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   108
            get { return (this._ExtraKeys); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   109
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   110
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   111
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   112
        /// Gets whether the crash report window is visible to the user.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   113
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   114
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   115
        public bool IsCrashReportVisible
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   116
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   117
            get { return (this._IsCrashReportVisible); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   118
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   119
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   120
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   121
        /// Gets whether developer mode is enabled.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   122
        /// Can only be set from the registry.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   123
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   124
        public bool IsDeveloperModeEnabled
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   125
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   126
            get { return (this._IsDeveloperModeEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   127
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   128
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   129
        /// <summary>
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   130
        /// Gets or sets whether data should be stored encrypted for all accounts.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   131
        /// </summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   132
        public bool IsEncryptAllAccountsEnabled
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   133
        {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   134
            get { return (this._IsEncryptAllAccountsEnabled); }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   135
            set { this._IsEncryptAllAccountsEnabled = value; }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   136
        }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   137
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   138
        /// <summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   139
        /// Gets or sets whether to use a key server.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   140
        /// When set, this also updates the pEp engine.
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   141
        /// </summary>
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   142
        public bool IsKeyServerUsed
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   143
        {
451
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   144
            get { return (this._IsKeyServerUsed); }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   145
            set
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   146
            {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   147
                this._IsKeyServerUsed = value;
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   148
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   149
                // Start/stop key server
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   150
                if (this._IsKeyServerUsed)
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   151
                {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   152
                    ThisAddIn.pEp.start_keyserver_lookup();
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   153
                }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   154
                else
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   155
                {
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   156
                    ThisAddIn.pEp.stop_keyserver_lookup();
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   157
                }
7dd0bb192256 Standardize all option names and implement subject encryption option.
Dean Looyengoed
parents: 450
diff changeset
   158
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   159
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   160
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   161
        /// <summary>
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   162
        /// Gets or sets whether passive mode is enabled.
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   163
        /// When set, this also updates the pEp engine.
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   164
        /// Passive mode will not attach keys unless keys are received.
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   165
        /// </summary>
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   166
        public bool IsPassiveModeEnabled
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   167
        {
598
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   168
            get { return (this._IsPassiveModeEnabled); }
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   169
            set
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   170
            {
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   171
                this._IsPassiveModeEnabled = value;
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   172
                ThisAddIn.pEp.passive_mode(this._IsPassiveModeEnabled);
e1ff494dc53b Implement passive mode which can only be enabled from the registry.
Dean Looyengoed
parents: 597
diff changeset
   173
            }
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   174
        }
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   175
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   176
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   177
        /// Gets or sets whether TNEF/RTF format is forcefully disabled in the registry.
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   178
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   179
        public bool IsTNEFDisabled
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   180
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   181
            get { return (this._IsTNEFDisabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   182
            set { this._IsTNEFDisabled = value; }
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   183
        }
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   184
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   185
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   186
        /// Gets or sets whether to enable encryption of message subjects.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   187
        /// When set, this also updates the pEp engine.
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   188
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   189
        public bool IsUnencryptedSubjectEnabled
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   190
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   191
            get { return (this._IsUnencryptedSubjectEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   192
            set
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   193
            {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   194
                this._IsUnencryptedSubjectEnabled = value;
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   195
                ThisAddIn.pEp.unencrypted_subject(this._IsUnencryptedSubjectEnabled);
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   196
            }
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   197
        }
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   198
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   199
        /// <summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   200
        /// Gets or sets whether verbose logging is enabled.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   201
        /// When set, this also updates the pEp engine.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   202
        /// </summary>
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   203
        public bool IsVerboseLoggingEnabled
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   204
        {
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   205
            get { return (this._IsVerboseLoggingEnabled); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   206
            set
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   207
            {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   208
                this._IsVerboseLoggingEnabled = value;
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   209
                ThisAddIn.pEp.verbose_logging(this._IsVerboseLoggingEnabled);
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   210
            }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   211
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   212
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   213
        /// <summary>
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   214
        /// Gets the pEp engine which is static.
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   215
        /// </summary>
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   216
        public static pEpEngine pEp
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   217
        {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   218
            get
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   219
            {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   220
                if (_pEp == null)
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   221
                {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   222
                    try
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   223
                    {
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   224
                        _pEp = new pEpEngine();
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   225
                    }
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   226
                    catch (Exception ex)
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   227
                    {
467
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   228
                        string summaryMessage = Properties.Resources.Message_InitError + " " +
aeb05f7b2704 Finish initial implementation of global exception handler and sending crash report.
Dean Looyengoed
parents: 465
diff changeset
   229
                                                Properties.Resources.Message_Reinstall;
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   230
                        Global.StopAndSendCrashReport(ex, summaryMessage, false, true);
460
690f8853d7ae Start to implement the global exception handler in ThisAddIn.
Dean Looyengoed
parents: 455
diff changeset
   231
64
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   232
                        return null;
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   233
                    }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   234
                }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   235
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   236
                return _pEp;
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   237
            }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   238
        }
5111a11eed7f replacing TextMessage object with struct
Volker Birk <vb@pep-project.org>
parents: 61
diff changeset
   239
611
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   240
        /// <summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   241
        /// Gets the temporary outlook folder used to save unencrypted outlook mail items.
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   242
        /// </summary>
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   243
        public Outlook.Folder TempFolder
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   244
        {
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   245
            get { return (this._TempFolder); }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   246
        }
70127a03488a Alphabetize order of properties.
Dean Looyengoed
parents: 608
diff changeset
   247
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   248
        /**************************************************************
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   249
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   250
         * Methods
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   251
         * 
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   252
         *************************************************************/
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   253
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
   254
        /// <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
   255
        /// 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
   256
        /// </summary>
326
2acfe22efee4 Remove pEp ribbon tab and add ribbon for backstage options (disabled for now).
Dean Looyengoed
parents: 307
diff changeset
   257
        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
   258
        {
340
ded73ac01f51 Implement the send unencrypted option in the ribbon.
Dean Looyengoed
parents: 335
diff changeset
   259
            return new RibbonCustomizations();
335
6411b6eb2638 Add initial backstage menu for options.
Dean Looyengoed
parents: 330
diff changeset
   260
        }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   261
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
   262
        /// <summary>
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   263
        /// Detects and disables GPG for Windows GpgOL Outlook add-in.
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   264
        /// </summary>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   265
        /// <returns>True if the GpgOL add-in was disabled.</returns>
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   266
        private bool DisableGpgOL()
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   267
        {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   268
            bool wasDisabled = false;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   269
            Office.COMAddIns comAddIns;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   270
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   271
            comAddIns = Globals.ThisAddIn.Application.COMAddIns;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   272
            foreach (Office.COMAddIn addin in comAddIns)
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   273
            {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   274
                if (string.Equals(addin.Description, "GpgOL - The GnuPG Outlook Plugin", StringComparison.OrdinalIgnoreCase))
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   275
                {
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   276
                    addin.Connect = false;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   277
                    wasDisabled = true;
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   278
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   279
                    Global.Log("DisableGpgOL: GpgOL was detected and disabled.");
626
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   280
                }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   281
            }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   282
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   283
            return (wasDisabled);
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   284
        }
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   285
6fce9c5a037e Add and implement DisableGpgOL method.
Dean Looyengoed
parents: 625
diff changeset
   286
        /// <summary>
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   287
        /// Registers each personal identity in the pEp engine.
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   288
        /// An identity is determined by 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
   289
        /// </summary>
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   290
        public void RegisterMyself()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   291
        {
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   292
            Outlook.NameSpace ns = Application.Session;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   293
            Outlook.Account acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   294
            Outlook.Accounts accounts = ns.Accounts;
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   295
            Outlook.Recipient currUser = null;
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   296
            pEp_identity_s me;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   297
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   298
            for (int i = 1; i <= accounts.Count; i++)
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   299
            {
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   300
                acct = accounts[i];
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   301
                currUser = acct.CurrentUser;
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   302
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   303
                me = new pEp_identity_s();
14
84089e08d01c bugfix for Exchange account(s)
vb
parents: 13
diff changeset
   304
                me.address = acct.SmtpAddress;
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   305
                me.username = (currUser != null ? currUser.Name : null);
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   306
                me.user_id = Globals.ThisAddIn.GetUserID(me.address, null);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   307
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   308
                // Log information if invalid
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   309
                if (string.IsNullOrWhiteSpace(me.address))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   310
                {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   311
                    Global.Log("RegisterMyself: Myself[" + i.ToString() + "] doesn't have an address.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   312
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   313
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   314
                if (string.IsNullOrWhiteSpace(me.username))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   315
                {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   316
                    Global.Log("RegisterMyself: Myself[" + i.ToString() + "] doesn't have a username.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   317
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   318
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   319
                if (string.IsNullOrWhiteSpace(me.user_id))
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   320
                {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   321
                    Global.Log("RegisterMyself: Myself[" + i.ToString() + "] doesn't have a user ID.");
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   322
                }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   323
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   324
                // Call engine
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   325
                try
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   326
                {
59
Volker Birk <vb@pep-project.org>
parents: 55
diff changeset
   327
                    pEp.myself(me);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   328
                }
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   329
                catch (COMException ex)
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   330
                {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   331
                    Global.StopAndSendCrashReport(ex);
12
7dce2af80337 first key will be used to sign a message
vb
parents: 0
diff changeset
   332
                }
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   333
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   334
                // Release objects
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   335
                if (acct != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   336
                {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   337
                    Marshal.ReleaseComObject(acct);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   338
                    acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   339
                }
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   340
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   341
                if (currUser != null)
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   342
                {
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   343
                    Marshal.ReleaseComObject(currUser);
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   344
                    currUser = null;
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   345
                }
575
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   346
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   347
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   348
            // Release objects
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   349
            if (ns != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   350
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   351
                Marshal.ReleaseComObject(ns);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   352
                ns = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   353
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   354
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   355
            if (acct != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   356
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   357
                Marshal.ReleaseComObject(acct);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   358
                acct = null;
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   359
            }
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   360
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   361
            if (accounts != null)
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   362
            {
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   363
                Marshal.ReleaseComObject(accounts);
27512d0d41cf Rewrite RegisterMyself method to release objects and log issues.
Dean Looyengoed
parents: 571
diff changeset
   364
                accounts = null;
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   365
            }
588
2d12fb5ee4fc Add developer mode to config and options state.
Dean Looyengoed
parents: 587
diff changeset
   366
576
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   367
            if (currUser != null)
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   368
            {
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   369
                Marshal.ReleaseComObject(currUser);
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   370
                currUser = null;
e0190df007de Check if current user is null in RegisterMyself method.
Dean Looyengoed
parents: 575
diff changeset
   371
            }
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   372
384
a0aa034cb7f3 Create and implement new classes for PEPAttachment, PEPIdentity and PEPMessage.
Dean Looyengoed
parents: 378
diff changeset
   373
            return;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   374
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   375
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   376
        /// <summary>
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   377
        /// Gets whether the given contact should be forcefully sent unencrypted messages.
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   378
        /// This will read the value of the user property.
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   379
        /// </summary>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   380
        /// <param name="contact">The contact to get the force unencrypted status from.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   381
        /// <returns>True if the mail item is force unencrypted, otherwise false or null.</returns>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   382
        public bool? GetForceUnencrypted(Outlook.ContactItem contact)
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   383
        {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   384
            bool? value = false;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   385
            Outlook.UserProperties properties = contact.UserProperties;
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   386
            Outlook.UserProperty up = properties.Find(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED);
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   387
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   388
            if (up == null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   389
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   390
                value = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   391
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   392
            else
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   393
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   394
                value = up.Value;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   395
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   396
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   397
            // Release objects
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   398
            if (properties != null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   399
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   400
                Marshal.ReleaseComObject(properties);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   401
                properties = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   402
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   403
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   404
            if (up != null)
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   405
            {
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   406
                Marshal.ReleaseComObject(up);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   407
                up = null;
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   408
            }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   409
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   410
            return (value);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   411
        }
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   412
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   413
        /// <summary>
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   414
        /// Sets whether the given contact should be forcefully sent unencrypted messages.
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   415
        /// This will set the value of the user property.
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   416
        /// </summary>
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   417
        /// <param name="contact">The contact to set force unencrypted status for.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   418
        /// <param name="forceUnencrypted">The force unencrypted status to set.</param>
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   419
        public void SetForceUnencrypted(Outlook.ContactItem contact,
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   420
                                        bool forceUnencrypted)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   421
        {
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   422
            Outlook.UserProperties properties = contact.UserProperties;
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   423
            Outlook.UserProperty up = properties.Find(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED);
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   424
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   425
            if (up == null)
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   426
            {
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   427
                up = contact.UserProperties.Add(CryptableMailItem.USER_PROPERTY_KEY_FORCE_UNENCRYPTED,
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   428
                                                Outlook.OlUserPropertyType.olYesNo, false);
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   429
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   430
664
9dcf25b27787 Rename send unencrypted to force unencrypted throughout code.
Dean Looyengoed
parents: 660
diff changeset
   431
            up.Value = forceUnencrypted;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   432
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   433
            // Release objects
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   434
            if (properties != null)
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   435
            {
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   436
                Marshal.ReleaseComObject(properties);
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   437
                properties = null;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   438
            }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   439
488
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   440
            if (up != null)
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   441
            {
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   442
                Marshal.ReleaseComObject(up);
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   443
                up = null;
c654979e27ac Fix so release isn't done on null objects...
Dean Looyengoed
parents: 487
diff changeset
   444
            }
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   445
624
a678557a3750 Implement support for force unencrypted in contacts.
Dean Looyengoed
parents: 611
diff changeset
   446
            return;
487
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   447
        }
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   448
b27803e13913 Add initial methods to support contact-based send unencrypted message.
Dean Looyengoed
parents: 482
diff changeset
   449
        /// <summary>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   450
        /// 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
   451
        /// </summary>
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   452
        /// <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
   453
        /// <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
   454
        /// 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
   455
        /// <returns>The user ID (Outlook EntryID) for the given address</returns>
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   456
        public string GetUserID(string address,
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   457
                                Outlook.ContactItem contact)
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   458
        {
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   459
            string id = null;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   460
            string myselfStr;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   461
            byte[] computedHash;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   462
            SHA256Managed hashGenerator = new SHA256Managed();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   463
            StringBuilder strBuilder;
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   464
            Outlook.Folder contactFolder = null;
507
d0b1586c5235 Add fallback to GetUserID that searches address book entry-by-entry.
Dean Looyengoed
parents: 502
diff changeset
   465
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   466
            try
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   467
            {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   468
                if (string.IsNullOrEmpty(address) == false)
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   469
                {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   470
                    // Search cache
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   471
                    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
   472
                    {
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   473
                        try
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   474
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   475
                            id = this.userIDCache[address];
569
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   476
                        }
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   477
                        catch
74cd9fc6dc6e Cleanup UserID calculation method.
Dean Looyengoed
parents: 566
diff changeset
   478
                        {
608
38ba4b8308f2 Update GetUserID method to cache IDs, skip Exchange servers and create new contacts if necessary.
Dean Looyengoed
parents: 607
diff changeset
   479
                            id = null;
510
500cb064737d Remove try/catch around GetUserID that could hide errors.
Dean Looyengoed
parents: 508
diff changeset
   480
                        }
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   481
                    }
477
23462dc9e619 Release COM objects in GetUserID.
Dean Looyengoed
parents: 475
diff changeset
   482
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   483
                    // 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
   484
                    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
   485
                    {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   486
                        // Check if the address is myself
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   487
                        if (PEPIdentity.GetIsMyIdentity(address))
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   488
                        {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   489
                            strBuilder = new StringBuilder();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   490
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   491
                            // Note: pEp_for_Outlook is hardcoded here because it should not change
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   492
                            myselfStr = "pEp_for_Outlook_" + Environment.UserName;
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   493
                            computedHash = hashGenerator.ComputeHash(Encoding.Unicode.GetBytes(myselfStr));
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   494
714
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   495
                            foreach (byte b in computedHash)
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   496
                            {
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   497
                                strBuilder.Append(b.ToString("x2"));
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   498
                            }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   499
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   500
                            id = strBuilder.ToString().ToUpper();
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   501
                            this.userIDCache[address] = id;
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   502
                        }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   503
                    }
761f853c4c0f For all Myself identities, calculate user ID using a hash of the windows Environment.UserName;
Dean Looyengoed
parents: 686
diff changeset
   504
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   505
                    // Use a contact EntryID if available
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   506
                    if ((id == null) &&
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   507
                        (contact != null))
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   508
                    {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   509
                        try
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   510
                        {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   511
                            contactFolder = (Outlook.Folder)contact.Parent;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   512
                            id = contactFolder.StoreID.ToUpper() + "_" + contact.EntryID.ToUpper();
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   513
                            this.userIDCache[address] = id;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   514
                        }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   515
                        catch
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   516
                        {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   517
                            Global.Log("GetUserID: Attempted to use contact but failed.");
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   518
                        }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   519
                    }
725
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   520
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   521
                    // Use the address itself as a user ID (this can be removed after virtual users are supported)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   522
                    if (id == null)
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   523
                    {
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   524
                        id = "ID_" + address.ToUpper().Trim();
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   525
                        this.userIDCache[address] = id;
41bac55ab436 Comment out user_id calculation using address books.
Dean Looyengoed
parents: 714
diff changeset
   526
                    }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   527
                }
474
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   528
            }
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   529
            catch (Exception ex)
a27dbbb2dd88 Add try/catch and error handling around several ThisAddIn methods.
Dean Looyengoed
parents: 473
diff changeset
   530
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   531
                Global.StopAndSendCrashReport(ex);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   532
            }
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   533
            finally
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   534
            {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   535
                if (contactFolder != null)
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   536
                {
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   537
                    Marshal.FinalReleaseComObject(contactFolder);
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   538
                    contactFolder = null;
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   539
                }
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   540
            }
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   541
587
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   542
            // Log if no ID was found
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   543
            if (string.IsNullOrWhiteSpace(id))
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   544
            {
776
451e3831822b Support passing a contact in the GetUserID method.
Dean Looyengoed
parents: 773
diff changeset
   545
                Global.Log("GetUserID: Failed to find an ID.");
587
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   546
            }
cecb650d6cd8 Improve logging including the GetUserID method not finding an ID.
Dean Looyengoed
parents: 586
diff changeset
   547
511
4a970a30be20 Get rid of unnecessary null/empty check as the structure of the method has changed.
Dean Looyengoed
parents: 510
diff changeset
   548
            return (id);
362
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   549
        }
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   550
867beb89ee19 Move GetUserIDFromAddress from the CryptableMailItem to ThisAddIn.
Dean Looyengoed
parents: 361
diff changeset
   551
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   552
        /// 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
   553
        /// 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
   554
        /// 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
   555
        /// </summary>
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   556
        /// <param name="message">The message to send.</param>
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   557
        /// <param name="deleteAfterSend">Whether the message is deleted after sending (true) or a copy is saved (false).</param>
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   558
        public void SendWithoutProcessing(PEPMessage message,
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   559
                                          bool deleteAfterSend)
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   560
        {
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   561
            Outlook.MailItem newItem;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   562
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   563
            newItem = Application.CreateItem(Outlook.OlItemType.olMailItem);
586
2c2bfd7f1e43 Improve handling of optional properties in PEPMessage.
Dean Looyengoed
parents: 576
diff changeset
   564
            message.ApplyTo(newItem, false); // Do NOT include optional properties!
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   565
502
4b4d88db09eb When sending a PEPMessage, set the UseTNEF property to false to avoid winmail.dat in some circumstances.
Dean Looyengoed
parents: 501
diff changeset
   566
            // Do not allow TNEF/RTF format with 'winmail.dat' attachment
548
626fa51f7131 Use MAPIHelper throughout code. Also now clear UNSENT flag when creating new Mirrors.
Dean Looyengoed
parents: 540
diff changeset
   567
            MAPIHelper.SetProperty(newItem, MAPIHelper.PR_USE_TNEF, false);
570
21d996cd35e8 Stop searching through Exchange AddressLists due to performance.
Dean Looyengoed
parents: 569
diff changeset
   568
565
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   569
            // Save the new item to the default folder of the sending account
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   570
            // This must be done so an EntryID is created.
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   571
            newItem.Save();
502
4b4d88db09eb When sending a PEPMessage, set the UseTNEF property to false to avoid winmail.dat in some circumstances.
Dean Looyengoed
parents: 501
diff changeset
   572
565
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   573
            // Set property to not process on send
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   574
            this.doNotProcessList.Add(newItem.EntryID);
ba35cfbfa0ee Stop setting user property for 'do not process' and instead use a do not process list.
Dean Looyengoed
parents: 562
diff changeset
   575
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   576
            /* Send
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   577
             * 
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   578
             * Note: For ActiveSync accounts, the DeleteAfterSubmit property is ignored.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   579
             * This means the message will always appear in the sent folder by default.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   580
             * The reason for this is unknown.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   581
             * 
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   582
             * It's possible this is related to the ActiveSync specification version
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   583
             * and therefore may behave differently depending on Outlook version.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   584
             * More research is needed here.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   585
             */
475
7a23ec4d8b28 Add deleteAfterSend parameter in SendWithoutProcessing method.
Dean Looyengoed
parents: 474
diff changeset
   586
            newItem.DeleteAfterSubmit = deleteAfterSend;
465
3f5d92b648ce Make SendWithoutProcessing public.
Dean Looyengoed
parents: 462
diff changeset
   587
            ((Outlook._MailItem)newItem).Send();
455
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   588
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   589
            Marshal.ReleaseComObject(newItem);
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   590
            newItem = null;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   591
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   592
            return;
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   593
        }
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   594
a4158ad1f4b7 Add method to create a new Outlook MailItem and send it without processing.
Dean Looyengoed
parents: 453
diff changeset
   595
        /// <summary>
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   596
        /// Create a new 'sent' Outlook MailItem and place it in the given sent folder.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   597
        /// 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
   598
        /// 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
   599
        /// </summary>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   600
        /// <param name="sentFolder">The folder to place the sent mail item within.</param>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   601
        /// <param name="sentMessage">The message that is sent.</param>
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   602
        private void CreateNewSentMail(Outlook.Folder sentFolder,
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   603
                                       PEPMessage sentMessage)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   604
        {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   605
            System.Int32 messageFlags;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   606
            Outlook.MailItem sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   607
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   608
            try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   609
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   610
                // Create the basic sent mail item
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   611
                sentMailItem = (Outlook.MailItem)sentFolder.Items.Add(Outlook.OlItemType.olMailItem);
743
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   612
                sentMessage.ApplyTo(sentMailItem, false); // Do NOT include optional properties!
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   613
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   614
                // Set the sender
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   615
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_SENDER_NAME, sentMessage.From.Username);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   616
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_SENDER_EMAIL_ADDRESS, sentMessage.From.Address);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   617
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   618
                // Set the date and time the mail item was sent
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   619
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_CLIENT_SUBMIT_TIME, DateTime.Now.ToUniversalTime());
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   620
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   621
                // Set flags
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   622
                messageFlags = (System.Int32)MAPIHelper.GetProperty(sentMailItem, MAPIHelper.PR_MESSAGE_FLAGS);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   623
                messageFlags &= ~((System.Int32)MAPIHelper.MSGFLAGS.MSGFLAG_UNSENT);  // Clear UNSENT flag -- must be done before save
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   624
                messageFlags |= ((System.Int32)MAPIHelper.MSGFLAGS.MSGFLAG_READ);     // Mark as read
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   625
                MAPIHelper.SetProperty(sentMailItem, MAPIHelper.PR_MESSAGE_FLAGS, messageFlags);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   626
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   627
                // Save changes to the mail item (must be done last for some properties)
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   628
                sentMailItem.Save();
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   629
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   630
                /* Attempt to move to the sent folder.
744
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   631
                 * For ActiveSync accounts, this will fail with the error:
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   632
                 * 'Sorry, Exchange ActiveSync doesn't support what you're trying to do.'
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   633
                 * This is because the .Items.Add(folder) will ignore the specified folder and create in local Drafts.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   634
                 * Then "Exchange ActiveSync doesn’t support the Drafts folder" so it can't be moved out.
278a6ecd7639 Document and implement special handling for Exchange ActiveSync issues during send.
Dean Looyengoed
parents: 743
diff changeset
   635
                 * Even in the Outlook UI a draft cannot be 'dragged' out of 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
   636
                 */
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   637
                try
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   638
                {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   639
                    sentMailItem.Move(sentFolder);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   640
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   641
                catch { }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   642
            }
743
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   643
            catch (Exception ex)
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   644
            {
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   645
                throw (ex);
5bad37bca12f Do not include optional properties when calling .ApplyTo for a sent mail item.
Dean Looyengoed
parents: 738
diff changeset
   646
            }
738
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   647
            finally
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   648
            {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   649
                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
   650
                {
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   651
                    Marshal.ReleaseComObject(sentMailItem);
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   652
                    sentMailItem = null;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   653
                }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   654
            }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   655
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   656
            return;
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   657
        }
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   658
ac649e82fd98 Create and save the sent mail item exactly the same as how it was composed.
Dean Looyengoed
parents: 726
diff changeset
   659
        /// <summary>
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   660
        /// Permanently deletes the given mail item from Outlook.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   661
        /// This will also remove any mail item data before save.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   662
        /// Therefore, it is safe for handling sensitive data.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   663
        /// </summary>
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   664
        /// <param name="mailStore">The store containing the mail item being deleted.
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   665
        /// This is used to locate the deleted folder.</param>
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   666
        /// <param name="mailItem">The mail item to delete.</param>
748
8a7e2ff74375 Make PermanentlyDelete method public in ThisAddIn.
Dean Looyengoed
parents: 746
diff changeset
   667
        public void PermanentlyDelete(Outlook.Store mailStore,
8a7e2ff74375 Make PermanentlyDelete method public in ThisAddIn.
Dean Looyengoed
parents: 746
diff changeset
   668
                                      Outlook.MailItem mailItem)
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   669
        {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   670
            bool deleted = false;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   671
            string deleteValue;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   672
            Outlook.Folder deletedFolder = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   673
            Outlook.MailItem deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   674
            Outlook.Attachments attachments = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   675
            Outlook.Recipients recipients = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   676
            Outlook.Items items = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   677
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   678
            try
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   679
            {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   680
                /* Remove all relevant data from the mail item
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   681
                 * This is done so it is not saved later where it could be unencrypted
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   682
                 */
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   683
                recipients = mailItem.Recipients;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   684
                while (recipients.Count > 0)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   685
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   686
                    recipients.Remove(1);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   687
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   688
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   689
                mailItem.Subject = "";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   690
                mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   691
                mailItem.Body = "";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   692
                mailItem.HTMLBody = "";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   693
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   694
                attachments = mailItem.Attachments;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   695
                while (attachments.Count > 0)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   696
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   697
                    attachments.Remove(1);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   698
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   699
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   700
                mailItem.Save();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   701
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   702
                /* Move the mail item to the deleted folder then delete (otherwise calling .Delete() will only move to deleted items)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   703
                 * For ActiveSync accounts, the .Move() call will fail with the error:
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   704
                 * 'Sorry, Exchange ActiveSync doesn't support what you're trying to do.'
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   705
                 */
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   706
                try
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   707
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   708
                    deletedFolder = (Outlook.Folder)mailStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   709
                    deletedMailItem = (Outlook.MailItem)mailItem.Move(deletedFolder);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   710
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   711
                    /* Change the subject and Save
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   712
                     * If the subject (or another property) is not changed the .Save() call will be ignored
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   713
                     * Calling .Save() is for some reason necessary before .Delete() to work properly
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   714
                     */
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   715
                    deletedMailItem.Subject = "pEp";
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   716
                    deletedMailItem.Save();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   717
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   718
                    // Now that the mail item is in the deleted folder, calling .Delete() will delete permanently
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   719
                    deletedMailItem.Delete();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   720
                    deleted = true;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   721
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   722
                catch { }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   723
                finally
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   724
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   725
                    if (deletedFolder != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   726
                    {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   727
                        Marshal.ReleaseComObject(deletedFolder);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   728
                        deletedFolder = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   729
                    }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   730
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   731
                    if (deletedMailItem != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   732
                    {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   733
                        Marshal.ReleaseComObject(deletedMailItem);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   734
                        deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   735
                    }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   736
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   737
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   738
                // Try secondary method supporting ActiveSync accounts
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   739
                if (deleted == false)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   740
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   741
                    deletedFolder = (Outlook.Folder)mailStore.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   742
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   743
                    // Tag the item with a user property so it can be located in the deleted folder
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   744
                    deleteValue = "DELETE_" + mailItem.EntryID;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   745
                    CryptableMailItem.SetUserProperty(mailItem, "DELETE", deleteValue, Outlook.OlUserPropertyType.olText);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   746
                    mailItem.Save();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   747
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   748
                    // Delete the mail item moving to deleted items folder
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   749
                    mailItem.Delete();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   750
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   751
                    // Permanently delete item by locating in the delete items folder
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   752
                    items = deletedFolder.Items;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   753
                    for (int i = 1; i <= items.Count; i++)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   754
                    {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   755
                        deletedMailItem = items[i];
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   756
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   757
                        // Check if the property exists
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   758
                        if ((string)CryptableMailItem.GetUserProperty(deletedMailItem, "DELETE", "") == deleteValue)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   759
                        {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   760
                            deletedMailItem.Delete();
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   761
                            deleted = true;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   762
                            break;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   763
                        }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   764
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   765
                        Marshal.ReleaseComObject(deletedMailItem);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   766
                        deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   767
                    }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   768
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   769
            }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   770
            catch (Exception ex)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   771
            {
759
82a75792c133 Shorten logging method names.
Dean Looyengoed
parents: 750
diff changeset
   772
                Global.Log("PermanentlyDelete: Failed, " + ex.ToString());
745
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   773
            }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   774
            finally
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   775
            {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   776
                if (deletedFolder != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   777
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   778
                    Marshal.ReleaseComObject(deletedFolder);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   779
                    deletedFolder = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   780
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   781
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   782
                if (deletedMailItem != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   783
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   784
                    Marshal.ReleaseComObject(deletedMailItem);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   785
                    deletedMailItem = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   786
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   787
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   788
                if (attachments != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   789
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   790
                    Marshal.ReleaseComObject(attachments);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   791
                    attachments = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   792
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   793
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   794
                if (recipients != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   795
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   796
                    Marshal.ReleaseComObject(recipients);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   797
                    recipients = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   798
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   799
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   800
                if (items != null)
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   801
                {
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   802
                    Marshal.ReleaseComObject(items);
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   803
                    items = null;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   804
                }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   805
            }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   806
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   807
            return;
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   808
        }
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   809
832f49345e6f Add PermanentlyDelete method to remove any drafts or original mail item after send.
Dean Looyengoed
parents: 744
diff changeset
   810
        /// <summary>
671
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   811
        /// 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
   812
        /// 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
   813
        /// </summary>
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   814
        /// <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
   815
        /// <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
   816
        private bool GetIsAccountTrusted(string address)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   817
        {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   818
            bool isTrusted = false;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   819
            string searchAddress = address.ToUpper().Trim();
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   820
            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
   821
            string whitelistAccount;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   822
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   823
            for (int i = 0; i < this._AccountWhitelist.Length; i++)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   824
            {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   825
                whitelistAccount = this._AccountWhitelist[i].ToUpper().Trim();
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   826
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   827
                // Check for exact match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   828
                if (searchAddress == whitelistAccount)
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   829
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   830
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   831
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   832
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   833
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   834
                // Check for domain match
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   835
                if ((searchDomain != null) &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   836
                    whitelistAccount.StartsWith("@") &&
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   837
                    (searchDomain == whitelistAccount))
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   838
                {
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   839
                    isTrusted = true;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   840
                    break;
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   841
                }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   842
            }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   843
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   844
            return (isTrusted);
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   845
        }
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   846
57fdc1b20a02 Add method to get account trust by searching the whitelist.
Dean Looyengoed
parents: 667
diff changeset
   847
        /// <summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   848
        /// Writes/saves any supported configuration/property values to the registry.
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   849
        /// </summary>
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   850
        private void WriteConfigToRegistry()
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   851
        {
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   852
            /* Note: 
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   853
             * Do not save the below properties which can only be modified from the registry
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   854
             *   • AccountWhitelist
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   855
             *   • CrashReportSendAddress
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   856
             *   • ExtraKeys
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   857
             *   • IsCrashReportVisible
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   858
             *   • IsDeveloperModeEnabled
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   859
             *   • IsPassiveModeEnabled
452
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   860
             */
9be34118b38f Add IsSendWithoutKeyEnabled config option and read from registry.
Dean Looyengoed
parents: 451
diff changeset
   861
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   862
            try
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   863
            {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   864
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE, true))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   865
                {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   866
                    using (RegistryKey key2 = key1.CreateSubKey(REG_KEY_PEP))
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   867
                    {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   868
                        // Set encryption state of each account
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   869
                        using (RegistryKey key3 = key2.CreateSubKey(REG_KEY_ENCRYPTED_ACCOUNTS_LIST))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   870
                        {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   871
                            foreach (KeyValuePair<string, bool> entry in this._EncryptedAccountsList)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   872
                            {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   873
                                key3.SetValue(entry.Key,
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   874
                                              entry.Value.ToString(),
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   875
                                              RegistryValueKind.String);
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   876
                            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   877
                        }
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   878
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   879
                        key2.SetValue(REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED, this._IsEncryptAllAccountsEnabled.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   880
                        key2.SetValue(REG_NAME_IS_KEY_SERVER_USED, this._IsKeyServerUsed.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   881
                        key2.SetValue(REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED, this._IsUnencryptedSubjectEnabled.ToString());
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   882
                        key2.SetValue(REG_NAME_IS_VERBOSE_LOGGING_ENABLED, this._IsVerboseLoggingEnabled.ToString());
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   883
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   884
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   885
            }
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   886
            catch (Exception ex)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   887
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   888
                Global.StopAndSendCrashReport(ex);
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   889
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   890
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   891
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   892
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   893
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   894
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   895
        /// Reads/loads any configuration/property values from the registry.
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   896
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   897
        private void ReadConfigFromRegistry()
0
6dfec3b090d6 initial commit
vb
parents:
diff changeset
   898
        {
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   899
            bool isSuccessful;
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   900
            int parsedIntValue;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   901
            bool parsedBoolValue;
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   902
            string keyValue;
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   903
            object value;
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   904
            string[] registryWhitelist;
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   905
            List<string> whitelist;
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   906
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   907
            /* Note: property accessors (instead of private members) are used for the
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   908
             * few cases where changing a property requires additional steps (like updating pEp engine).
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   909
             */
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   910
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   911
            try
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   912
            {
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   913
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   914
                {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   915
                    using (RegistryKey keyOffice = key1.OpenSubKey(REG_KEY_MICROSOFT_OFFICE))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   916
                    {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   917
                        using (RegistryKey keyPreferences = keyOffice.OpenSubKey(Application.Version.Substring(0, 2) + ".0\\Outlook\\Preferences\\"))
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   918
                        {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   919
                            /* Attempt to get IsTNEFDisabled
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   920
                             *  "12" Outlook 2007
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   921
                             *  "14" Outlook 2010
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   922
                             *  "15" Outlook 2013
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   923
                             *  "16" Outlook 2016
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   924
                             */
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   925
                            keyValue = keyPreferences.GetValue(ThisAddIn.REG_NAME_IS_TNEF_DISABLED, Global.IS_TNEF_DISABLED_DEFAULT).ToString();
515
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   926
                            isSuccessful = int.TryParse(keyValue, out parsedIntValue);
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   927
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   928
                            if (isSuccessful)
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   929
                            {
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   930
                                this.IsTNEFDisabled = (parsedIntValue > 0);
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   931
                            }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   932
                        }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   933
                    }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   934
                }
ed828de6d215 Read IsTNEFDisabled from the registry and display as read-only in options.
Dean Looyengoed
parents: 513
diff changeset
   935
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   936
                using (RegistryKey key1 = Registry.CurrentUser.OpenSubKey(REG_KEY_SOFTWARE, true))
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   937
                {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   938
                    using (RegistryKey key2 = key1.CreateSubKey(REG_KEY_PEP))
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
   939
                    {
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   940
                        // Attempt to get AccountWhitelist
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   941
                        value = key2.GetValue(REG_NAME_ACCOUNT_WHITELIST, null);
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   942
                        if (value != null)
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   943
                        {
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   944
                            whitelist = new List<string>();
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   945
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   946
                            // Copy over hardcoded values
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   947
                            for (int i = 0; i < Global.HARDCODED_ACCOUNT_WHITELIST.Length; i++)
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   948
                            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   949
                                whitelist.Add(Global.HARDCODED_ACCOUNT_WHITELIST[i].Trim());
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   950
                            }
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   951
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   952
                            // Copy over registry values
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   953
                            registryWhitelist = value.ToString().Split(';');
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   954
                            for (int i = 0; i < registryWhitelist.Length; i++)
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   955
                            {
650
568a3a9c2d33 Add account whitelist property and trim when making the list.
Dean Looyengoed
parents: 649
diff changeset
   956
                                whitelist.Add(registryWhitelist[i].Trim());
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   957
                            }
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   958
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   959
                            this._AccountWhitelist = whitelist.ToArray();
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   960
                        }
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   961
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   962
                        // Attempt to get CrashReportSendAddress
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   963
                        this._CrashReportSendAddress = key2.GetValue(REG_NAME_CRASH_REPORT_SEND_ADDRESS, Global.CRASH_REPORT_SEND_ADDRESS_DEFAULT).ToString();
453
4b8c31936610 Add crash report config options and read from registry.
Dean Looyengoed
parents: 452
diff changeset
   964
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   965
                        // Get encryption state of each account in the registry -- any previous values are cleared
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   966
                        this.EncryptedAccountsList.Clear();
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   967
                        using (RegistryKey key3 = key2.CreateSubKey(REG_KEY_ENCRYPTED_ACCOUNTS_LIST))
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   968
                        {
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   969
                            foreach (string name in key3.GetValueNames())
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   970
                            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   971
                                keyValue = key3.GetValue(name, Global.ENCRYPT_ACCOUNTS_BY_DEFAULT).ToString();
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   972
                                isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   973
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   974
                                if (isSuccessful)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   975
                                {
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   976
                                    this.EncryptedAccountsList.Add(name, parsedBoolValue);
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
   977
                                }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   978
                            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
   979
                        }
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   980
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   981
                        // Attempt to get ExtraKeys value 
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   982
                        value = key2.GetValue(REG_NAME_EXTRA_KEYS);
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   983
                        if (value != null)
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   984
                        {
649
ad161bea020a Add AccountWhitelist and read from registry.
Dean Looyengoed
parents: 640
diff changeset
   985
                            this._ExtraKeys = value.ToString().Split(',');
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   986
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   987
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   988
                        // Attempt to get IsCrashReportVisible
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   989
                        keyValue = key2.GetValue(REG_NAME_IS_CRASH_REPORT_VISIBLE, Global.IS_CRASH_REPORT_VISIBLE_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   990
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   991
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   992
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   993
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   994
                            this._IsCrashReportVisible = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   995
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   996
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   997
                        // Attempt to get IsDeveloperModeEnabled
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
   998
                        keyValue = key2.GetValue(REG_NAME_IS_DEVELOPER_MODE_ENABLED, Global.IS_DEVELOPER_MODE_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
   999
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1000
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1001
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1002
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1003
                            this._IsDeveloperModeEnabled = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1004
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1005
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1006
                        // Attempt to get IsEncryptAllAccountsEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1007
                        keyValue = key2.GetValue(REG_NAME_IS_ENCRYPT_ALL_ACCOUNTS_ENABLED, Global.IS_ENCRYPT_ALL_ACCOUNTS_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1008
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1009
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1010
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1011
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1012
                            this.IsEncryptAllAccountsEnabled = parsedBoolValue;
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1013
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1014
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1015
                        // Attempt to get IsKeyServerUsed value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1016
                        keyValue = key2.GetValue(REG_NAME_IS_KEY_SERVER_USED, Global.IS_KEY_SERVER_USED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1017
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1018
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1019
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1020
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1021
                            this.IsKeyServerUsed = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1022
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1023
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1024
                        // Attempt to get IsPassiveModeEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1025
                        keyValue = key2.GetValue(REG_NAME_IS_PASSIVE_MODE_ENABLED, Global.IS_PASSIVE_MODE_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1026
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1027
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1028
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1029
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1030
                            this.IsPassiveModeEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1031
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1032
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1033
                        // Attempt to get IsUnencryptedSubjectEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1034
                        keyValue = key2.GetValue(REG_NAME_IS_UNENCRYPTED_SUBJECT_ENABLED, Global.IS_UNENCRYPTED_SUBJECT_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1035
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1036
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1037
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1038
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1039
                            this.IsUnencryptedSubjectEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1040
                        }
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1041
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1042
                        // Attempt to get IsVerboseLoggingEnabled value
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1043
                        keyValue = key2.GetValue(REG_NAME_IS_VERBOSE_LOGGING_ENABLED, Global.IS_VERBOSE_LOGGING_ENABLED_DEFAULT).ToString();
627
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1044
                        isSuccessful = bool.TryParse(keyValue, out parsedBoolValue);
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1045
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1046
                        if (isSuccessful)
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1047
                        {
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1048
                            this.IsVerboseLoggingEnabled = parsedBoolValue; // Must use property accessor
5cd866dfafd7 Alphabetize read/write configuration methods to match properties order.
Dean Looyengoed
parents: 626
diff changeset
  1049
                        }
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1050
                    }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1051
                }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1052
            }
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1053
            catch (Exception ex)
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1054
            {
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1055
                Global.StopAndSendCrashReport(ex);
462
088a683807a2 Add exception handling around registry access methods.
Dean Looyengoed
parents: 461
diff changeset
  1056
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1057
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1058
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1059
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1060
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1061
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1062
        /// 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
  1063
        /// 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
  1064
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1065
        /// <param name="state">The state to copy data from.</param>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1066
        public void SetOptionsState(FormOptions.State state)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1067
        {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1068
            if (state != null)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1069
            {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1070
                /* Note: property accessors (instead of private members) are used for the
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1071
                 * few cases where changing a property requires additional steps (like updating pEp engine).
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1072
                 */
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1073
                foreach (KeyValuePair<string, bool> entry in state.EncryptedAccountsList)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1074
                {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1075
                    if (this.EncryptedAccountsList.ContainsKey(entry.Key))
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1076
                    {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1077
                        // Modify value
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1078
                        this.EncryptedAccountsList[entry.Key] = entry.Value;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1079
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1080
                    else
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1081
                    {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1082
                        // Create new entry (if there was an additional account added to the session)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1083
                        this.EncryptedAccountsList.Add(entry.Key, entry.Value);
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1084
                    }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1085
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1086
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1087
                this.IsEncryptAllAccountsEnabled = state.IsEncryptAllAccountsEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1088
                this.IsKeyServerUsed = state.IsKeyServerUsed;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1089
                this.IsTNEFDisabled = state.IsTNEFDisabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1090
                this.IsUnencryptedSubjectEnabled = state.IsUnencryptedSubjectEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1091
                this.IsVerboseLoggingEnabled = state.IsVerboseLoggingEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1092
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1093
                // 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
  1094
                this.lastOptionsState = state.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1095
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1096
                // Update registry (in case of unforseen app shutdown)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1097
                this.WriteConfigToRegistry();
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1098
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1099
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1100
            return;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1101
        }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1102
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1103
        /// <summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1104
        /// 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
  1105
        /// </summary>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1106
        /// <returns>A new options form state.</returns>
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1107
        public FormOptions.State GetOptionsState()
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1108
        {
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1109
            FormOptions.State state;
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1110
            Outlook.Account acct = null;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1111
            Outlook.NameSpace ns = Globals.ThisAddIn.Application.Session;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1112
            Outlook.Accounts accounts = ns.Accounts;
219
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1113
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1114
            // 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
  1115
            if (this.lastOptionsState != null)
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1116
            {
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1117
                state = this.lastOptionsState.Copy();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1118
            }
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1119
            else
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1120
            {
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1121
                state = new FormOptions.State();
ee11aec8fa86 Save and restore the complete options state between instances of the options form.
Dean Looyengoed
parents: 209
diff changeset
  1122
            }
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1123
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1124
            // Build list of all accounts -- only the ones in the current session
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1125
            state.EncryptedAccountsList.Clear();
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1126
            for (int i = 1; i <= accounts.Count; i++)
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1127
            {
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1128
                acct = accounts[i];
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1129
746
0677a7726eb5 Use Account SMTP address instead of display name in the EncryptedAccountsList.
Dean Looyengoed
parents: 745
diff changeset
  1130
                state.EncryptedAccountsList.Add(acct.SmtpAddress,
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1131
                                                Global.ENCRYPT_ACCOUNTS_BY_DEFAULT);
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1132
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1133
                Marshal.ReleaseComObject(acct);
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1134
                acct = null;
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1135
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1136
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1137
            // Attempt to get encryption state of each account
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1138
            foreach (KeyValuePair<string, bool> entry in this._EncryptedAccountsList)
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1139
            {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1140
                if (state.EncryptedAccountsList.ContainsKey(entry.Key))
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1141
                {
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1142
                    state.EncryptedAccountsList[entry.Key] = entry.Value;
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1143
                }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1144
            }
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1145
659
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1146
            state.IsDeveloperModeEnabled = this._IsDeveloperModeEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1147
            state.IsEncryptAllAccountsEnabled = this._IsEncryptAllAccountsEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1148
            state.IsKeyServerUsed = this._IsKeyServerUsed;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1149
            state.IsTNEFDisabled = this._IsTNEFDisabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1150
            state.IsUnencryptedSubjectEnabled = this._IsUnencryptedSubjectEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1151
            state.IsVerboseLoggingEnabled = this._IsVerboseLoggingEnabled;
a1712cc16fdb Report system information in about page of options.
Dean Looyengoed
parents: 652
diff changeset
  1152
            state.PEPCopyright = "Copyright 2014-2016 p≡p Security SA, Luxembourg";
444
e826ac5f1017 Add serial number to options state and display in UI.
Dean Looyengoed
parents: 426
diff changeset
  1153
            state.PEPName = "p≡p for Outlook";
660
e5346cda03ff Merge GlobalConst and GlobalExceptionHandler into only one Global class.
Dean Looyengoed
parents: 659
diff changeset
  1154
            state.SystemInfo = Global.GetSystemInfo();
444
e826ac5f1017 Add serial number to options state and display in UI.
Dean Looyengoed
parents: 426
diff changeset
  1155
203
44dac4bb337a Complete the state management in both the options form and this add-in.
Dean Looyengoed
parents: 201
diff changeset
  1156
            return (state);
190
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1157
        }
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1158
a685c30e07d2 Refactor/comment/partial rewrite of the ThisAddIn class.
Dean Looyengoed
parents: 168
diff changeset
  1159
        /// <summary>
750
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1160
        /// Connects events for folder/item move detection in all Outlook stores.
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1161
        /// Only the first level of folders will be connected to events 'watched'.
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1162
        /// The watched folders will then automatically remove mirrors as necessary.
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1163
        /// </summary>
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1164
        private void ConnectWatchedFolders()
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1165
        {
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1166
            Outlook.Store store;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1167
            Outlook.Stores stores;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1168
            Outlook.Folders storeFolders = null;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1169
            Outlook.NameSpace ns = Application.Session;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1170
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1171
            stores = ns.Stores;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1172
            for (int i = 1; i <= stores.Count; i++)
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1173
            {
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1174
                store = stores[i];
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1175
                storeFolders = store.GetRootFolder().Folders;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1176
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1177
                for (int j = 1; j <= storeFolders.Count; j++)
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1178
                {
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1179
                    this.watchedFolders.Add(new WatchedFolder((Outlook.Folder)storeFolders[j]));
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1180
                }
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1181
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1182
                // Release objects
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1183
                if (store != null)
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1184
                {
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1185
                    Marshal.ReleaseComObject(store);
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1186
                    store = null;
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1187
                }
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: 748
diff changeset
  1188
f8f13666a42a Add initial implementation to delete mirrors when their associated OMI is deleted.
Dean Looyengoed
parents: