| [454] | 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. | 
|---|