| 1 | Unit WebBrowserUnit;
 | 
|---|
| 2 | 
 | 
|---|
| 3 | // NewView - a new OS/2 Help Viewer
 | 
|---|
| 4 | // Copyright 2003 Aaron Lawrence (aaronl at consultant dot com)
 | 
|---|
| 5 | // Copyright 2006-2007 Ronald Brill (rbri at rbri dot de)
 | 
|---|
| 6 | // This software is released under the Gnu Public License - see readme.txt
 | 
|---|
| 7 | 
 | 
|---|
| 8 | Interface
 | 
|---|
| 9 | 
 | 
|---|
| 10 |   // Code for running the default browser.
 | 
|---|
| 11 |   // Doesn't implement DDE!
 | 
|---|
| 12 |   Procedure LaunchURL(const aURL: String);
 | 
|---|
| 13 | 
 | 
|---|
| 14 | 
 | 
|---|
| 15 | Implementation
 | 
|---|
| 16 | 
 | 
|---|
| 17 | uses
 | 
|---|
| 18 |   PMSHL,
 | 
|---|
| 19 |   OS2Def,
 | 
|---|
| 20 |   ACLUtility,
 | 
|---|
| 21 |   SysUtils,
 | 
|---|
| 22 |   RunProgramUnit,
 | 
|---|
| 23 |   FileUtilsUnit,
 | 
|---|
| 24 |   StringUtilsUnit,
 | 
|---|
| 25 |   DebugUnit;
 | 
|---|
| 26 | 
 | 
|---|
| 27 | const
 | 
|---|
| 28 |   PROFILE_APPLICATION_WPURLDEFAULTSETTINGS = 'WPURLDEFAULTSETTINGS';
 | 
|---|
| 29 |   // Browser
 | 
|---|
| 30 |   PROFILE_KEY_DEFAULT_BROWSER_EXE = 'DefaultBrowserExe';
 | 
|---|
| 31 |   PROFILE_KEY_DEFAULT_WORKING_DIR = 'DefaultWorkingDir';
 | 
|---|
| 32 |   PROFILE_KEY_DEFAULT_PARAMETERS = 'DefaultParameters';
 | 
|---|
| 33 | 
 | 
|---|
| 34 |   PROFILE_KEY_DEFAULT_MAIL_EXE = 'DefaultMailExe';
 | 
|---|
| 35 |   PROFILE_KEY_DEFAULT_MAIL_WORKING_DIR = 'DefaultMailWorkingDir';
 | 
|---|
| 36 |   PROFILE_KEY_DEFAULT_MAIL_PARAMETERS = 'DefaultMailParameters';
 | 
|---|
| 37 | 
 | 
|---|
| 38 |   PROFILE_KEY_DEFAULT_NEWS_EXE = 'DefaultNewsExe';
 | 
|---|
| 39 |   PROFILE_KEY_DEFAULT_NEWS_WORKING_DIR = 'DefaultNewsWorkingDir';
 | 
|---|
| 40 |   PROFILE_KEY_DEFAULT_NEWS_PARAMETERS = 'DefaultNewsParameters';
 | 
|---|
| 41 | 
 | 
|---|
| 42 |   PROFILE_KEY_DEFAULT_FTP_EXE = 'DefaultFTPExe';
 | 
|---|
| 43 |   PROFILE_KEY_DEFAULT_FTP_WORKING_DIR = 'DefaultFTPWorkingDir';
 | 
|---|
| 44 |   PROFILE_KEY_DEFAULT_FTP_PARAMETERS = 'DefaultFTPParameters';
 | 
|---|
| 45 | 
 | 
|---|
| 46 | 
 | 
|---|
| 47 |   Function GetDefaultBrowserExe : String;
 | 
|---|
| 48 |   begin
 | 
|---|
| 49 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_BROWSER_EXE, '');
 | 
|---|
| 50 |     if Result = '' then
 | 
|---|
| 51 |     begin
 | 
|---|
| 52 |       // try Web Explorer
 | 
|---|
| 53 |       SearchPath('PATH', 'explore.exe', Result);
 | 
|---|
| 54 |     end;
 | 
|---|
| 55 |   end;
 | 
|---|
| 56 | 
 | 
|---|
| 57 | 
 | 
|---|
| 58 |   Function GetDefaultBrowserWorkingDir : String;
 | 
|---|
| 59 |   begin
 | 
|---|
| 60 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_WORKING_DIR, '');
 | 
|---|
| 61 |     if Result = '' then
 | 
|---|
| 62 |     begin
 | 
|---|
| 63 |       Result := ExtractFilePath(GetDefaultBrowserExe);
 | 
|---|
| 64 |     end;
 | 
|---|
| 65 |   end;
 | 
|---|
| 66 | 
 | 
|---|
| 67 | 
 | 
|---|
| 68 |   Function GetDefaultParameters : String;
 | 
|---|
| 69 |   begin
 | 
|---|
| 70 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_PARAMETERS, '');
 | 
|---|
| 71 |   end;
 | 
|---|
| 72 | 
 | 
|---|
| 73 | 
 | 
|---|
| 74 |   Function GetDefaultMailExe : String;
 | 
|---|
| 75 |   begin
 | 
|---|
| 76 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_MAIL_EXE, '');
 | 
|---|
| 77 |   end;
 | 
|---|
| 78 | 
 | 
|---|
| 79 | 
 | 
|---|
| 80 |   Function GetDefaultMailWorkingDir : String;
 | 
|---|
| 81 |   begin
 | 
|---|
| 82 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_MAIL_WORKING_DIR, '');
 | 
|---|
| 83 |     if Result = '' then
 | 
|---|
| 84 |     begin
 | 
|---|
| 85 |       Result := ExtractFilePath(GetDefaultMailExe);
 | 
|---|
| 86 |     end;
 | 
|---|
| 87 |   end;
 | 
|---|
| 88 | 
 | 
|---|
| 89 | 
 | 
|---|
| 90 |   Function GetDefaultMailParameters : String;
 | 
|---|
| 91 |   begin
 | 
|---|
| 92 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_MAIL_PARAMETERS, '');
 | 
|---|
| 93 |   end;
 | 
|---|
| 94 | 
 | 
|---|
| 95 | 
 | 
|---|
| 96 |   Function GetDefaultNewsExe : String;
 | 
|---|
| 97 |   begin
 | 
|---|
| 98 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_NEWS_EXE, '');
 | 
|---|
| 99 |   end;
 | 
|---|
| 100 | 
 | 
|---|
| 101 | 
 | 
|---|
| 102 |   Function GetDefaultNewsWorkingDir : String;
 | 
|---|
| 103 |   begin
 | 
|---|
| 104 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_NEWS_WORKING_DIR, '');
 | 
|---|
| 105 |     if Result = '' then
 | 
|---|
| 106 |     begin
 | 
|---|
| 107 |       Result := ExtractFilePath(GetDefaultNewsExe);
 | 
|---|
| 108 |     end;
 | 
|---|
| 109 |   end;
 | 
|---|
| 110 | 
 | 
|---|
| 111 | 
 | 
|---|
| 112 |   Function GetDefaultNewsParameters : String;
 | 
|---|
| 113 |   begin
 | 
|---|
| 114 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_NEWS_PARAMETERS, '');
 | 
|---|
| 115 |   end;
 | 
|---|
| 116 | 
 | 
|---|
| 117 | 
 | 
|---|
| 118 |   Function GetDefaultFtpExe : String;
 | 
|---|
| 119 |   begin
 | 
|---|
| 120 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_FTP_EXE, '');
 | 
|---|
| 121 |   end;
 | 
|---|
| 122 | 
 | 
|---|
| 123 | 
 | 
|---|
| 124 |   Function GetDefaultFtpWorkingDir : String;
 | 
|---|
| 125 |   begin
 | 
|---|
| 126 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_FTP_WORKING_DIR, '');
 | 
|---|
| 127 |     if Result = '' then
 | 
|---|
| 128 |     begin
 | 
|---|
| 129 |       Result := ExtractFilePath(GetDefaultFtpExe);
 | 
|---|
| 130 |     end;
 | 
|---|
| 131 |   end;
 | 
|---|
| 132 | 
 | 
|---|
| 133 | 
 | 
|---|
| 134 |   Function GetDefaultFtpParameters : String;
 | 
|---|
| 135 |   begin
 | 
|---|
| 136 |     Result := GetUserProfileString(PROFILE_APPLICATION_WPURLDEFAULTSETTINGS, PROFILE_KEY_DEFAULT_FTP_PARAMETERS, '');
 | 
|---|
| 137 |   end;
 | 
|---|
| 138 | 
 | 
|---|
| 139 | 
 | 
|---|
| 140 |   Procedure LaunchURL(const aURL: String);
 | 
|---|
| 141 |   var
 | 
|---|
| 142 |     tmpExe : String;
 | 
|---|
| 143 |     tmpAlternativeExe : String;
 | 
|---|
| 144 |     tmpWorkingDir : String;
 | 
|---|
| 145 |     tmpParameters : String;
 | 
|---|
| 146 |   begin
 | 
|---|
| 147 |     // default is to start the browser
 | 
|---|
| 148 |     tmpExe := GetDefaultBrowserExe;
 | 
|---|
| 149 |     tmpWorkingDir := GetDefaultBrowserWorkingDir;
 | 
|---|
| 150 |     tmpParameters := GetDefaultParameters;
 | 
|---|
| 151 | 
 | 
|---|
| 152 |     if not FileExists(tmpExe) then
 | 
|---|
| 153 |     begin
 | 
|---|
| 154 |       raise Exception.Create('Browser program doesn''t exist: ' + tmpExe);
 | 
|---|
| 155 |     end;
 | 
|---|
| 156 | 
 | 
|---|
| 157 |     if tmpExe = '' then
 | 
|---|
| 158 |     begin
 | 
|---|
| 159 |       raise Exception.Create('You don''t have a default browser configured.');
 | 
|---|
| 160 |     end;
 | 
|---|
| 161 | 
 | 
|---|
| 162 |     if StrStartsWithIgnoringCase(aURL, '"ftp')
 | 
|---|
| 163 |        or StrStartsWithIgnoringCase(aURL, 'ftp')
 | 
|---|
| 164 |     then
 | 
|---|
| 165 |     begin
 | 
|---|
| 166 |       tmpAlternativeExe := GetDefaultFtpExe;
 | 
|---|
| 167 |       if tmpAlternativeExe <> '' then
 | 
|---|
| 168 |       begin
 | 
|---|
| 169 |         tmpExe := tmpAlternativeExe;
 | 
|---|
| 170 |         tmpWorkingDir := GetDefaultFtpWorkingDir;
 | 
|---|
| 171 |         tmpParameters := GetDefaultFtpParameters;
 | 
|---|
| 172 |       end
 | 
|---|
| 173 |     end
 | 
|---|
| 174 |     else if StrStartsWithIgnoringCase(aURL, '"mailto')
 | 
|---|
| 175 |             or StrStartsWithIgnoringCase(aURL, 'mailto')
 | 
|---|
| 176 |     then
 | 
|---|
| 177 |     begin
 | 
|---|
| 178 |       tmpAlternativeExe := GetDefaultMailExe;
 | 
|---|
| 179 |       if tmpAlternativeExe <> '' then
 | 
|---|
| 180 |       begin
 | 
|---|
| 181 |         tmpExe := tmpAlternativeExe;
 | 
|---|
| 182 |         tmpWorkingDir := GetDefaultMailWorkingDir;
 | 
|---|
| 183 |         tmpParameters := GetDefaultMailParameters;
 | 
|---|
| 184 |       end
 | 
|---|
| 185 |     end
 | 
|---|
| 186 |     else if StrStartsWithIgnoringCase(aURL, '"news')
 | 
|---|
| 187 |             or StrStartsWithIgnoringCase(aURL, '"news')
 | 
|---|
| 188 |     then
 | 
|---|
| 189 |     begin
 | 
|---|
| 190 |       tmpAlternativeExe := GetDefaultNewsExe;
 | 
|---|
| 191 |       if tmpAlternativeExe <> '' then
 | 
|---|
| 192 |       begin
 | 
|---|
| 193 |         tmpExe := tmpAlternativeExe;
 | 
|---|
| 194 |         tmpWorkingDir := GetDefaultNewsWorkingDir;
 | 
|---|
| 195 |         tmpParameters := GetDefaultNewsParameters;
 | 
|---|
| 196 |       end
 | 
|---|
| 197 |     end;
 | 
|---|
| 198 | 
 | 
|---|
| 199 |     ChDir(RemoveRightDirectorySeparator(tmpWorkingDir));
 | 
|---|
| 200 |     LaunchProgram(tmpExe, tmpParameters + ' ' + aURL, tmpWorkingDir);
 | 
|---|
| 201 |   end;
 | 
|---|
| 202 | 
 | 
|---|
| 203 | Initialization
 | 
|---|
| 204 | End.
 | 
|---|