Sat, 07 Apr 2018 14:59:44 +0200
Merge Firestorm LGPL
1.1 --- a/autobuild.xml Wed Mar 21 20:23:52 2018 +0100 1.2 +++ b/autobuild.xml Sat Apr 07 14:59:44 2018 +0200 1.3 @@ -222,9 +222,9 @@ 1.4 <key>archive</key> 1.5 <map> 1.6 <key>hash</key> 1.7 - <string>8a19ebfac2b8ad690ef406ae55d13fe3</string> 1.8 - <key>url</key> 1.9 - <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux-201605221913-r44.tar.bz2</string> 1.10 + <string>2dd97d8bd012be4cdc58f550395feb7d</string> 1.11 + <key>url</key> 1.12 + <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux-180871815.tar.bz2</string> 1.13 </map> 1.14 <key>name</key> 1.15 <string>linux</string> 1.16 @@ -234,9 +234,9 @@ 1.17 <key>archive</key> 1.18 <map> 1.19 <key>hash</key> 1.20 - <string>2566e373b89a2e4f8e93a78948deda10</string> 1.21 - <key>url</key> 1.22 - <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux-x64-201509062227-r43.tar.bz2</string> 1.23 + <string>608dfd27f7aed9d57cf1f581c995b680</string> 1.24 + <key>url</key> 1.25 + <string>http://downloads.phoenixviewer.com/SDL-1.2.15-linux64-180841947.tar.bz2</string> 1.26 </map> 1.27 <key>name</key> 1.28 <string>linux64</string> 1.29 @@ -288,9 +288,9 @@ 1.30 <key>archive</key> 1.31 <map> 1.32 <key>hash</key> 1.33 - <string>1aa2e5355bb9df09f9196d14a72b6705</string> 1.34 - <key>url</key> 1.35 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-apr/rev/314241/arch/Linux/installer/apr_suite-1.4.5.314241-linux-314241.tar.bz2</string> 1.36 + <string>161e07b37e2f30da004a0d72d5075ad7</string> 1.37 + <key>url</key> 1.38 + <string>http://downloads.phoenixviewer.com/apr_suite-1.4.5.180871344-linux-180871344.tar.bz2</string> 1.39 </map> 1.40 <key>name</key> 1.41 <string>linux</string> 1.42 @@ -300,9 +300,9 @@ 1.43 <key>archive</key> 1.44 <map> 1.45 <key>hash</key> 1.46 - <string>e640dcbc376eec6f3a942b4625d92d8e</string> 1.47 - <key>url</key> 1.48 - <string>http://downloads.phoenixviewer.com/apr_suite-1.4.5.201505150215-r92-linux-x64-201505150215-r92.tar.bz2</string> 1.49 + <string>5c3c29851edd837d5f9518618c4a303b</string> 1.50 + <key>url</key> 1.51 + <string>http://downloads.phoenixviewer.com/apr_suite-1.4.5.180841559-linux64-180841559.tar.bz2</string> 1.52 </map> 1.53 <key>name</key> 1.54 <string>linux64</string> 1.55 @@ -378,9 +378,9 @@ 1.56 <key>archive</key> 1.57 <map> 1.58 <key>hash</key> 1.59 - <string>5ff95c28897a7bb4da93bd4f5b3d9d06</string> 1.60 - <key>url</key> 1.61 - <string>http://downloads.phoenixviewer.com/boost-1.57-linux-201505061539-r135.tar.bz2</string> 1.62 + <string>32828f4ee3e5a45ed31e37eb7dd6367c</string> 1.63 + <key>url</key> 1.64 + <string>http://downloads.phoenixviewer.com/boost-1.57-linux-180871354.tar.bz2</string> 1.65 </map> 1.66 <key>name</key> 1.67 <string>linux</string> 1.68 @@ -390,9 +390,9 @@ 1.69 <key>archive</key> 1.70 <map> 1.71 <key>hash</key> 1.72 - <string>e86cc6e004d39d7210f708b39bed77a9</string> 1.73 - <key>url</key> 1.74 - <string>http://downloads.phoenixviewer.com/boost-1.57-linux-x64-201505150230-r138.tar.bz2</string> 1.75 + <string>b1d3daab689c5a8c8869715c5111d38e</string> 1.76 + <key>url</key> 1.77 + <string>http://downloads.phoenixviewer.com/boost-1.57-linux64-180841628.tar.bz2</string> 1.78 </map> 1.79 <key>name</key> 1.80 <string>linux64</string> 1.81 @@ -496,9 +496,9 @@ 1.82 <key>archive</key> 1.83 <map> 1.84 <key>hash</key> 1.85 - <string>f73cbdc220605119cf5f1b0c42d3bb9c</string> 1.86 - <key>url</key> 1.87 - <string>http://downloads.phoenixviewer.com/colladadom-2.3.201505061613-r94-linux-201505061613-r94.tar.bz2</string> 1.88 + <string>d83896f28716f34b7b49d61a23283c4c</string> 1.89 + <key>url</key> 1.90 + <string>http://downloads.phoenixviewer.com/colladadom-2.3.180871403-linux-180871403.tar.bz2</string> 1.91 </map> 1.92 <key>name</key> 1.93 <string>linux</string> 1.94 @@ -508,9 +508,9 @@ 1.95 <key>archive</key> 1.96 <map> 1.97 <key>hash</key> 1.98 - <string>0f3447ce6fddba79b54cb5959e95f330</string> 1.99 - <key>url</key> 1.100 - <string>http://downloads.phoenixviewer.com/colladadom-2.3.201505150238-r95-linux-x64-201505150238-r95.tar.bz2</string> 1.101 + <string>91a522a7bf0e8d66d2941c76dc28a261</string> 1.102 + <key>url</key> 1.103 + <string>http://downloads.phoenixviewer.com/colladadom-2.3.180841822-linux64-180841822.tar.bz2</string> 1.104 </map> 1.105 <key>name</key> 1.106 <string>linux64</string> 1.107 @@ -586,9 +586,9 @@ 1.108 <key>archive</key> 1.109 <map> 1.110 <key>hash</key> 1.111 - <string>9430c08954c00736117099046694e1b1</string> 1.112 - <key>url</key> 1.113 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-curl/rev/314230/arch/Linux/installer/curl-7.47.0.314230-linux-314230.tar.bz2</string> 1.114 + <string>cade3843dfd7985f008cc8161daaefb0</string> 1.115 + <key>url</key> 1.116 + <string>http://downloads.phoenixviewer.com/curl-7.54.1.180871811-linux-180871811.tar.bz2</string> 1.117 </map> 1.118 <key>name</key> 1.119 <string>linux</string> 1.120 @@ -598,9 +598,9 @@ 1.121 <key>archive</key> 1.122 <map> 1.123 <key>hash</key> 1.124 - <string>630a2ddf43bba6e5b6e171dc68921dcb</string> 1.125 - <key>url</key> 1.126 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/8663/36142/curl-7.54.1.508652-linux64-508652.tar.bz2</string> 1.127 + <string>51d9ce98279709854b0be5d0f450ba63</string> 1.128 + <key>url</key> 1.129 + <string>http://downloads.phoenixviewer.com/curl-7.54.1.180841943-linux64-180841943.tar.bz2</string> 1.130 </map> 1.131 <key>name</key> 1.132 <string>linux64</string> 1.133 @@ -684,9 +684,9 @@ 1.134 <key>archive</key> 1.135 <map> 1.136 <key>hash</key> 1.137 - <string>6d676abd9ad8d2883b855dbe397d9034</string> 1.138 - <key>url</key> 1.139 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux-314266.tar.bz2</string> 1.140 + <string>9591dcb7efce2a770d77e907705e1492</string> 1.141 + <key>url</key> 1.142 + <string>http://downloads.phoenixviewer.com/dbus_glib-0.76-linux-180871236.tar.bz2</string> 1.143 </map> 1.144 <key>name</key> 1.145 <string>linux</string> 1.146 @@ -696,9 +696,9 @@ 1.147 <key>archive</key> 1.148 <map> 1.149 <key>hash</key> 1.150 - <string>7ee7b9aed3c0c8c09e7bf26bba7af8e1</string> 1.151 - <key>url</key> 1.152 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-dbus-glib/rev/314266/arch/Linux/installer/dbus_glib-0.76-linux64-314266.tar.bz2</string> 1.153 + <string>5a685a65a7066937ef580dcd5a90f9dc</string> 1.154 + <key>url</key> 1.155 + <string>http://downloads.phoenixviewer.com/dbus_glib-0.76-linux64-180841549.tar.bz2</string> 1.156 </map> 1.157 <key>name</key> 1.158 <string>linux64</string> 1.159 @@ -768,9 +768,9 @@ 1.160 <key>archive</key> 1.161 <map> 1.162 <key>hash</key> 1.163 - <string>efc92b20a8170ab4f4d3f88c03c6cb9b</string> 1.164 - <key>url</key> 1.165 - <string>http://192.168.1.115/dev/pkg/dullahan-1.1.651_3.2987.1591.gd3e47f5-linux-171011511.tar.bz2</string> 1.166 + <string>bd0f62a03d846332adf07997e307cde6</string> 1.167 + <key>url</key> 1.168 + <string>http://downloads.phoenixviewer.com/dullahan-1.1.1080_3.3325.1750.gaabe4c4-linux-180871715.tar.bz2</string> 1.169 </map> 1.170 <key>name</key> 1.171 <string>linux</string> 1.172 @@ -780,9 +780,9 @@ 1.173 <key>archive</key> 1.174 <map> 1.175 <key>hash</key> 1.176 - <string>331c13dfd261f867884308f15d9952bc</string> 1.177 - <key>url</key> 1.178 - <string>http://192.168.1.115/dev/pkg/dullahan-1.1.651_3.2987.1591.gd3e47f5-linux64-171011518.tar.bz2</string> 1.179 + <string>6dded97d697c5ac9e4bd33c9ca8e3f9e</string> 1.180 + <key>url</key> 1.181 + <string>http://downloads.phoenixviewer.com/dullahan-1.1.1080_3.3325.1750.gaabe4c4-linux64-180861548.tar.bz2</string> 1.182 </map> 1.183 <key>name</key> 1.184 <string>linux64</string> 1.185 @@ -882,9 +882,9 @@ 1.186 <key>archive</key> 1.187 <map> 1.188 <key>hash</key> 1.189 - <string>387c90b9bb5ec412587fbe7a56261dd1</string> 1.190 - <key>url</key> 1.191 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-expat/rev/314211/arch/Linux/installer/expat-2.1.1.314211-linux-314211.tar.bz2</string> 1.192 + <string>b20e813b55488e43df5c197f1efd165c</string> 1.193 + <key>url</key> 1.194 + <string>http://downloads.phoenixviewer.com/expat-2.1.1.180871203-linux-180871203.tar.bz2</string> 1.195 </map> 1.196 <key>name</key> 1.197 <string>linux</string> 1.198 @@ -894,9 +894,9 @@ 1.199 <key>archive</key> 1.200 <map> 1.201 <key>hash</key> 1.202 - <string>5e1f025d1cebd12db542080aa755257f</string> 1.203 - <key>url</key> 1.204 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/380/943/expat-2.1.1.500375-linux64-500375.tar.bz2</string> 1.205 + <string>bbcfe77b920fb7f00c7f2a494ffc6c43</string> 1.206 + <key>url</key> 1.207 + <string>http://downloads.phoenixviewer.com/expat-2.1.1.180841547-linux64-180841547.tar.bz2</string> 1.208 </map> 1.209 <key>name</key> 1.210 <string>linux64</string> 1.211 @@ -962,11 +962,11 @@ 1.212 <key>archive</key> 1.213 <map> 1.214 <key>hash</key> 1.215 - <string>eccdcb4a1e96bb829284d01255f4f913</string> 1.216 + <string>a379240b46b13b2b9e858baa79d1a6ab</string> 1.217 <key>hash_algorithm</key> 1.218 <string>md5</string> 1.219 <key>url</key> 1.220 - <string>file:///opt/firestorm/fmodstudio-1.10.02-linux-201801091647.tar.bz2</string> 1.221 + <string>file:///opt/firestorm/fmodstudio-1.10.04-linux-180891813.tar.bz2</string> 1.222 </map> 1.223 <key>name</key> 1.224 <string>linux</string> 1.225 @@ -976,11 +976,11 @@ 1.226 <key>archive</key> 1.227 <map> 1.228 <key>hash</key> 1.229 - <string>8787b777a49d41ccbb3cbd6c4a1d768d</string> 1.230 + <string>e0b59ec3b5549b9a0f9caf8c7116af4e</string> 1.231 <key>hash_algorithm</key> 1.232 <string>md5</string> 1.233 <key>url</key> 1.234 - <string>file:///opt/firestorm/fmodstudio-1.10.02-linux-x64-201801091648.tar.bz2</string> 1.235 + <string>file:///opt/firestorm/fmodstudio-1.10.04-linux64-180891838.tar.bz2</string> 1.236 </map> 1.237 <key>name</key> 1.238 <string>linux64</string> 1.239 @@ -1088,9 +1088,9 @@ 1.240 <key>archive</key> 1.241 <map> 1.242 <key>hash</key> 1.243 - <string>a20a3d0ab7fc3401bc2ca81e9309f630</string> 1.244 - <key>url</key> 1.245 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux-314281.tar.bz2</string> 1.246 + <string>f7a2a70417ab9d2f999f80604cb4fa48</string> 1.247 + <key>url</key> 1.248 + <string>http://downloads.phoenixviewer.com/fontconfig-2.11.0-linux-180871443.tar.bz2</string> 1.249 </map> 1.250 <key>name</key> 1.251 <string>linux</string> 1.252 @@ -1100,9 +1100,9 @@ 1.253 <key>archive</key> 1.254 <map> 1.255 <key>hash</key> 1.256 - <string>e2419d56960c160670051fbb055fb729</string> 1.257 - <key>url</key> 1.258 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-fontconfig/rev/314281/arch/Linux/installer/fontconfig-2.11.0-linux64-314281.tar.bz2</string> 1.259 + <string>5818ed2d9b29bad00878f3e26b09b7f9</string> 1.260 + <key>url</key> 1.261 + <string>http://downloads.phoenixviewer.com/fontconfig-2.11.0-linux64-180841833.tar.bz2</string> 1.262 </map> 1.263 <key>name</key> 1.264 <string>linux64</string> 1.265 @@ -1154,9 +1154,9 @@ 1.266 <key>archive</key> 1.267 <map> 1.268 <key>hash</key> 1.269 - <string>1b401394106cedc86926bd488f5aa45e</string> 1.270 - <key>url</key> 1.271 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-freetype/rev/314215/arch/Linux/installer/freetype-2.4.4.314215-linux-314215.tar.bz2</string> 1.272 + <string>ced1bc8b28a2e87093b364c2b6d8cb9c</string> 1.273 + <key>url</key> 1.274 + <string>http://downloads.phoenixviewer.com/freetype-2.4.4.180871412-linux-180871412.tar.bz2</string> 1.275 </map> 1.276 <key>name</key> 1.277 <string>linux</string> 1.278 @@ -1166,9 +1166,9 @@ 1.279 <key>archive</key> 1.280 <map> 1.281 <key>hash</key> 1.282 - <string>b30634f1a6ee2b4940eee06267a607df</string> 1.283 - <key>url</key> 1.284 - <string>http://downloads.phoenixviewer.com/freetype-2.3.9.201505150242-r61-linux-x64-201505150242-r61.tar.bz2</string> 1.285 + <string>0dab99c682433145aa8f5e26d8940afd</string> 1.286 + <key>url</key> 1.287 + <string>http://downloads.phoenixviewer.com/freetype-2.4.4.180841832-linux64-180841832.tar.bz2</string> 1.288 </map> 1.289 <key>name</key> 1.290 <string>linux64</string> 1.291 @@ -1220,9 +1220,9 @@ 1.292 <key>archive</key> 1.293 <map> 1.294 <key>hash</key> 1.295 - <string>baf1fd13e1fe6aef586200fc87a70f53</string> 1.296 - <key>url</key> 1.297 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-glext/rev/314200/arch/Linux/installer/glext-68-linux-314200.tar.bz2</string> 1.298 + <string>da432b959ccd920adca1030ad7f1b6cf</string> 1.299 + <key>url</key> 1.300 + <string>http://downloads.phoenixviewer.com/glext-68-linux-180871251.tar.bz2</string> 1.301 </map> 1.302 <key>name</key> 1.303 <string>linux</string> 1.304 @@ -1232,9 +1232,9 @@ 1.305 <key>archive</key> 1.306 <map> 1.307 <key>hash</key> 1.308 - <string>5f3c9d61b620f949b199ebd8885218ed</string> 1.309 - <key>url</key> 1.310 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-glext/rev/314200/arch/Linux/installer/glext-68-linux64-314200.tar.bz2</string> 1.311 + <string>12b2d643a013be8297bbbe37743abe94</string> 1.312 + <key>url</key> 1.313 + <string>http://downloads.phoenixviewer.com/glext-68-linux64-180841554.tar.bz2</string> 1.314 </map> 1.315 <key>name</key> 1.316 <string>linux64</string> 1.317 @@ -1342,11 +1342,11 @@ 1.318 <key>archive</key> 1.319 <map> 1.320 <key>hash</key> 1.321 - <string>f62e7cff14feb646babaa19b7ea14ed3</string> 1.322 + <string>4aa53f9774195899efb9d14a0f6c4748</string> 1.323 <key>hash_algorithm</key> 1.324 <string>md5</string> 1.325 <key>url</key> 1.326 - <string>http://downloads.phoenixviewer.com/glod-1.0pre3.201704302344-linux-201704302344.tar.bz2</string> 1.327 + <string>http://downloads.phoenixviewer.com/glod-1.0pre3.180872225-linux-180872225.tar.bz2</string> 1.328 </map> 1.329 <key>name</key> 1.330 <string>linux</string> 1.331 @@ -1356,9 +1356,9 @@ 1.332 <key>archive</key> 1.333 <map> 1.334 <key>hash</key> 1.335 - <string>fea16abf8c2b7f38fc33a2142bfbfe18</string> 1.336 - <key>url</key> 1.337 - <string>http://downloads.phoenixviewer.com/glod-1.0pre3.201704302331-linux64-201704302331.tar.bz2</string> 1.338 + <string>c742c8b3903aadd79c3a6f3d3c09986d</string> 1.339 + <key>url</key> 1.340 + <string>http://downloads.phoenixviewer.com/glod-1.0pre3.180842253-linux64-180842253.tar.bz2</string> 1.341 </map> 1.342 <key>name</key> 1.343 <string>linux64</string> 1.344 @@ -1436,9 +1436,9 @@ 1.345 <key>archive</key> 1.346 <map> 1.347 <key>hash</key> 1.348 - <string>352e673897e8f36f8470150b8ace6ce9</string> 1.349 - <key>url</key> 1.350 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-google-breakpad/rev/314225/arch/Linux/installer/google_breakpad-1413.314225-linux-314225.tar.bz2</string> 1.351 + <string>95860763e872e984e4215b0fa22d40b8</string> 1.352 + <key>url</key> 1.353 + <string>http://downloads.phoenixviewer.com/google_breakpad-1413.180871249-linux-180871249.tar.bz2</string> 1.354 </map> 1.355 <key>name</key> 1.356 <string>linux</string> 1.357 @@ -1448,9 +1448,9 @@ 1.358 <key>archive</key> 1.359 <map> 1.360 <key>hash</key> 1.361 - <string>f8df27382e6afeee5408e85c010a6c86</string> 1.362 - <key>url</key> 1.363 - <string>http://downloads.phoenixviewer.com/google_breakpad-1413.201505150223-r95-linux-x64-201505150223-r95.tar.bz2</string> 1.364 + <string>aa4a74b0c5794034797f22d4bdc57a0d</string> 1.365 + <key>url</key> 1.366 + <string>http://downloads.phoenixviewer.com/google_breakpad-1413.180841553-linux64-180841553.tar.bz2</string> 1.367 </map> 1.368 <key>name</key> 1.369 <string>linux64</string> 1.370 @@ -1526,9 +1526,9 @@ 1.371 <key>archive</key> 1.372 <map> 1.373 <key>hash</key> 1.374 - <string>ad51f68702f25ba245fff312c50c8876</string> 1.375 - <key>url</key> 1.376 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-googlemock/rev/317828/arch/Linux/installer/googlemock-1.7.0.317828-linux-317828.tar.bz2</string> 1.377 + <string>5bc5ddeb97b8498d5141e27092161323</string> 1.378 + <key>url</key> 1.379 + <string>http://downloads.phoenixviewer.com/googlemock-1.7.0.180871704-linux-180871704.tar.bz2</string> 1.380 </map> 1.381 <key>name</key> 1.382 <string>linux</string> 1.383 @@ -1538,9 +1538,9 @@ 1.384 <key>archive</key> 1.385 <map> 1.386 <key>hash</key> 1.387 - <string>0f606bf01f933f00edeb9bf9a2530930</string> 1.388 - <key>url</key> 1.389 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/918/2056/googlemock-1.7.0.500908-linux64-500908.tar.bz2</string> 1.390 + <string>f879f518ea207cecf13943d58b57b515</string> 1.391 + <key>url</key> 1.392 + <string>http://downloads.phoenixviewer.com/googlemock-1.7.0.180841921-linux64-180841921.tar.bz2</string> 1.393 </map> 1.394 <key>name</key> 1.395 <string>linux64</string> 1.396 @@ -1590,9 +1590,9 @@ 1.397 <key>archive</key> 1.398 <map> 1.399 <key>hash</key> 1.400 - <string>5017b3e95d2c6f47bb111c3f9c075522</string> 1.401 - <key>url</key> 1.402 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux-314267.tar.bz2</string> 1.403 + <string>904540d91ea7d577c7bcbb679621f013</string> 1.404 + <key>url</key> 1.405 + <string>http://downloads.phoenixviewer.com/gstreamer-0.10.6.180871246-linux-180871246.tar.bz2</string> 1.406 </map> 1.407 <key>name</key> 1.408 <string>linux</string> 1.409 @@ -1602,9 +1602,9 @@ 1.410 <key>archive</key> 1.411 <map> 1.412 <key>hash</key> 1.413 - <string>7c9d7cc88add7831a6afeedc20cad2fe</string> 1.414 - <key>url</key> 1.415 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-gstreamer/rev/314267/arch/Linux/installer/gstreamer-0.10.6.314267-linux64-314267.tar.bz2</string> 1.416 + <string>86a358f1b5a2c2baf68444b2bfc5bb32</string> 1.417 + <key>url</key> 1.418 + <string>http://downloads.phoenixviewer.com/gstreamer-0.10.6.180841551-linux64-180841551.tar.bz2</string> 1.419 </map> 1.420 <key>name</key> 1.421 <string>linux64</string> 1.422 @@ -1630,9 +1630,9 @@ 1.423 <key>archive</key> 1.424 <map> 1.425 <key>hash</key> 1.426 - <string>8cd64b4c5d7f02c5ad87051861108749</string> 1.427 - <key>url</key> 1.428 - <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.0-linux-201608031222.tar.bz2</string> 1.429 + <string>fb047d496c32cc3b9f99793ee6ebb1e3</string> 1.430 + <key>url</key> 1.431 + <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.1-linux-180871647.tar.bz2</string> 1.432 </map> 1.433 <key>name</key> 1.434 <string>linux</string> 1.435 @@ -1642,16 +1642,16 @@ 1.436 <key>archive</key> 1.437 <map> 1.438 <key>hash</key> 1.439 - <string>61a10409052c7f77cbfe30b7a8cd7c0b</string> 1.440 - <key>url</key> 1.441 - <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.0-linux-x64-201505151700-r5.tar.bz2</string> 1.442 + <string>d918d894430c1d1d869b9f2e06570c65</string> 1.443 + <key>url</key> 1.444 + <string>http://downloads.phoenixviewer.com/gtk_atk_pango_glib-2.1-linux64-180841902.tar.bz2</string> 1.445 </map> 1.446 <key>name</key> 1.447 <string>linux64</string> 1.448 </map> 1.449 </map> 1.450 <key>version</key> 1.451 - <string>0.1</string> 1.452 + <string>2.1</string> 1.453 </map> 1.454 <key>havok-source</key> 1.455 <map> 1.456 @@ -1816,9 +1816,9 @@ 1.457 <key>archive</key> 1.458 <map> 1.459 <key>hash</key> 1.460 - <string>32560d3200da72fea2922371fcef25f5</string> 1.461 - <key>url</key> 1.462 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jpeglib/rev/314202/arch/Linux/installer/jpeglib-8c.314202-linux-314202.tar.bz2</string> 1.463 + <string>a7039c9a9c4461c5f85542f068dc09e5</string> 1.464 + <key>url</key> 1.465 + <string>http://downloads.phoenixviewer.com/jpeglib-8c.180871203-linux-180871203.tar.bz2</string> 1.466 </map> 1.467 <key>name</key> 1.468 <string>linux</string> 1.469 @@ -1828,9 +1828,9 @@ 1.470 <key>archive</key> 1.471 <map> 1.472 <key>hash</key> 1.473 - <string>8b36861396af4a31668f673aebd4b1d8</string> 1.474 - <key>url</key> 1.475 - <string>http://downloads.phoenixviewer.com/jpeglib-8c.201505150200-r27-linux-x64-201505150200-r27.tar.bz2</string> 1.476 + <string>324bb9deb00d256a12f8cbf686f413f0</string> 1.477 + <key>url</key> 1.478 + <string>http://downloads.phoenixviewer.com/jpeglib-8c.180841548-linux64-180841548.tar.bz2</string> 1.479 </map> 1.480 <key>name</key> 1.481 <string>linux64</string> 1.482 @@ -1906,9 +1906,9 @@ 1.483 <key>archive</key> 1.484 <map> 1.485 <key>hash</key> 1.486 - <string>9d5d9fec28cbbb1651b95728173f8af7</string> 1.487 - <key>url</key> 1.488 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-jsoncpp/rev/314229/arch/Linux/installer/jsoncpp-0.5.0.314229-linux-314229.tar.bz2</string> 1.489 + <string>da45220ec6fcf945f6ca1f11bc7606cf</string> 1.490 + <key>url</key> 1.491 + <string>http://downloads.phoenixviewer.com/jsoncpp-0.5.0.180872045-linux-180872045.tar.bz2</string> 1.492 </map> 1.493 <key>name</key> 1.494 <string>linux</string> 1.495 @@ -1918,9 +1918,9 @@ 1.496 <key>archive</key> 1.497 <map> 1.498 <key>hash</key> 1.499 - <string>e10077e94fa6916b6da001fc52e15ed6</string> 1.500 - <key>url</key> 1.501 - <string>http://downloads.phoenixviewer.com/jsoncpp-0.5.0.201508041908-r34-linux-x64-201508041908-r34.tar.bz2</string> 1.502 + <string>724850830e01cdb6afb4eed9ce2ec6c5</string> 1.503 + <key>url</key> 1.504 + <string>http://downloads.phoenixviewer.com/jsoncpp-0.5.0.180841554-linux64-180841554.tar.bz2</string> 1.505 </map> 1.506 <key>name</key> 1.507 <string>linux64</string> 1.508 @@ -1972,9 +1972,9 @@ 1.509 <key>archive</key> 1.510 <map> 1.511 <key>hash</key> 1.512 - <string>75991f598df209713faf94b4a1cb1a89</string> 1.513 - <key>url</key> 1.514 - <string>file:///opt/firestorm/kdu-7.A.3-darwin-180711129.tar.bz2</string> 1.515 + <string>814bec3fa5045a18dce2bc4ce78b585d</string> 1.516 + <key>url</key> 1.517 + <string>file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2</string> 1.518 </map> 1.519 <key>name</key> 1.520 <string>darwin</string> 1.521 @@ -1984,9 +1984,9 @@ 1.522 <key>archive</key> 1.523 <map> 1.524 <key>hash</key> 1.525 - <string>75991f598df209713faf94b4a1cb1a89</string> 1.526 - <key>url</key> 1.527 - <string>file:///opt/firestorm/kdu-7.A.3-darwin-180711129.tar.bz2</string> 1.528 + <string>814bec3fa5045a18dce2bc4ce78b585d</string> 1.529 + <key>url</key> 1.530 + <string>file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2</string> 1.531 </map> 1.532 <key>name</key> 1.533 <string>darwin64</string> 1.534 @@ -1996,9 +1996,9 @@ 1.535 <key>archive</key> 1.536 <map> 1.537 <key>hash</key> 1.538 - <string>1c4e11f6ca7cdc2a3e5158eda7a432be</string> 1.539 - <key>url</key> 1.540 - <string>file:///opt/firestorm/kdu-7.9.1-linux-201703182157.tar.bz2</string> 1.541 + <string>fa8a0db7f4900663f5d58eaac2b782b5</string> 1.542 + <key>url</key> 1.543 + <string>file:///opt/firestorm/kdu-7.A.4-linux-180892203.tar.bz2</string> 1.544 </map> 1.545 <key>name</key> 1.546 <string>linux</string> 1.547 @@ -2008,9 +2008,9 @@ 1.548 <key>archive</key> 1.549 <map> 1.550 <key>hash</key> 1.551 - <string>1c4e11f6ca7cdc2a3e5158eda7a432be</string> 1.552 - <key>url</key> 1.553 - <string>file:///opt/firestorm/kdu-7.9.1-linux-201703182157.tar.bz2</string> 1.554 + <string>fa8a0db7f4900663f5d58eaac2b782b5</string> 1.555 + <key>url</key> 1.556 + <string>file:///opt/firestorm/kdu-7.A.4-linux-180892203.tar.bz2</string> 1.557 </map> 1.558 <key>name</key> 1.559 <string>linux64</string> 1.560 @@ -2086,9 +2086,9 @@ 1.561 <key>archive</key> 1.562 <map> 1.563 <key>hash</key> 1.564 - <string>0d8009c3b6c1eb510593476dd1d821b5</string> 1.565 - <key>url</key> 1.566 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-hunspell/rev/314217/arch/Linux/installer/libhunspell-1.3.2.314217-linux-314217.tar.bz2</string> 1.567 + <string>77996d95cf2f072f4f277a2aaff20456</string> 1.568 + <key>url</key> 1.569 + <string>http://downloads.phoenixviewer.com/libhunspell-1.3.2.180871248-linux-180871248.tar.bz2</string> 1.570 </map> 1.571 <key>name</key> 1.572 <string>linux</string> 1.573 @@ -2098,9 +2098,9 @@ 1.574 <key>archive</key> 1.575 <map> 1.576 <key>hash</key> 1.577 - <string>7341037efcf156ad7aa6ba67ab0413c5</string> 1.578 - <key>url</key> 1.579 - <string>http://downloads.phoenixviewer.com/libhunspell-1.3.2.201505150222-r21-linux-x64-201505150222-r21.tar.bz2</string> 1.580 + <string>6555f040c686d8c1dec8e6264c2d3672</string> 1.581 + <key>url</key> 1.582 + <string>http://downloads.phoenixviewer.com/libhunspell-1.3.2.180841552-linux64-180841552.tar.bz2</string> 1.583 </map> 1.584 <key>name</key> 1.585 <string>linux64</string> 1.586 @@ -2242,9 +2242,9 @@ 1.587 <key>archive</key> 1.588 <map> 1.589 <key>hash</key> 1.590 - <string>0758f3cb4c02ebab61854b811b0894e9</string> 1.591 - <key>url</key> 1.592 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libpng/rev/314214/arch/Linux/installer/libpng-1.6.8.314214-linux-314214.tar.bz2</string> 1.593 + <string>31754947447ec98374b3bf92e29cf68a</string> 1.594 + <key>url</key> 1.595 + <string>http://downloads.phoenixviewer.com/libpng-1.6.8.180871343-linux-180871343.tar.bz2</string> 1.596 </map> 1.597 <key>name</key> 1.598 <string>linux</string> 1.599 @@ -2254,9 +2254,9 @@ 1.600 <key>archive</key> 1.601 <map> 1.602 <key>hash</key> 1.603 - <string>96cccc9c256107ff8425e15647957f17</string> 1.604 - <key>url</key> 1.605 - <string>http://downloads.phoenixviewer.com/libpng-1.6.8.201505150228-r52-linux-x64-201505150228-r52.tar.bz2</string> 1.606 + <string>83ae55031f81dace9dcf688cc5510010</string> 1.607 + <key>url</key> 1.608 + <string>http://downloads.phoenixviewer.com/libpng-1.6.8.180841558-linux64-180841558.tar.bz2</string> 1.609 </map> 1.610 <key>name</key> 1.611 <string>linux64</string> 1.612 @@ -2308,9 +2308,9 @@ 1.613 <key>archive</key> 1.614 <map> 1.615 <key>hash</key> 1.616 - <string>a2eaf9515cd129f3e21a08e92689006b</string> 1.617 - <key>url</key> 1.618 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libuuid/rev/314269/arch/Linux/installer/libuuid-1.6.2-linux-314269.tar.bz2</string> 1.619 + <string>1b1d83df165c947bea5c60c460277f93</string> 1.620 + <key>url</key> 1.621 + <string>http://downloads.phoenixviewer.com/libuuid-1.6.2-linux-180871203.tar.bz2</string> 1.622 </map> 1.623 <key>name</key> 1.624 <string>linux</string> 1.625 @@ -2320,9 +2320,9 @@ 1.626 <key>archive</key> 1.627 <map> 1.628 <key>hash</key> 1.629 - <string>6eca8418f134d2f4d97de89a33773be3</string> 1.630 - <key>url</key> 1.631 - <string>http://downloads.phoenixviewer.com/libuuid-1.6.2-linux-x64-201505150200-r8.tar.bz2</string> 1.632 + <string>f3cc32c84b99f1277370ce88a0faf40e</string> 1.633 + <key>url</key> 1.634 + <string>http://downloads.phoenixviewer.com/libuuid-1.6.2-linux64-180841554.tar.bz2</string> 1.635 </map> 1.636 <key>name</key> 1.637 <string>linux64</string> 1.638 @@ -2374,9 +2374,9 @@ 1.639 <key>archive</key> 1.640 <map> 1.641 <key>hash</key> 1.642 - <string>6954173a141d928f2614076577d952de</string> 1.643 - <key>url</key> 1.644 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-libxml/rev/314197/arch/Linux/installer/libxml2-2.9.1.314197-linux-314197.tar.bz2</string> 1.645 + <string>b4e676d3d583264f006432510727aa05</string> 1.646 + <key>url</key> 1.647 + <string>http://downloads.phoenixviewer.com/libxml2-2.9.4.180871340-linux-180871340.tar.bz2</string> 1.648 </map> 1.649 <key>name</key> 1.650 <string>linux</string> 1.651 @@ -2386,9 +2386,9 @@ 1.652 <key>archive</key> 1.653 <map> 1.654 <key>hash</key> 1.655 - <string>ba36cdab49fd5f3f5158cd6719a84a90</string> 1.656 - <key>url</key> 1.657 - <string>http://downloads.phoenixviewer.com/libxml2-2.9.1.201505150226-r42-linux-x64-201505150226-r42.tar.bz2</string> 1.658 + <string>0bc56fa68f59537486c75b04646d65a9</string> 1.659 + <key>url</key> 1.660 + <string>http://downloads.phoenixviewer.com/libxml2-2.9.4.180841555-linux64-180841555.tar.bz2</string> 1.661 </map> 1.662 <key>name</key> 1.663 <string>linux64</string> 1.664 @@ -2694,9 +2694,9 @@ 1.665 <key>archive</key> 1.666 <map> 1.667 <key>hash</key> 1.668 - <string>079c1a1bdb3ce1cda8ce3d7f75eeced3</string> 1.669 - <key>url</key> 1.670 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9258/41585/nghttp2-1.25.0.509246-linux-509246.tar.bz2</string> 1.671 + <string>24c50d563fe8ff10ca819088ffbef7a6</string> 1.672 + <key>url</key> 1.673 + <string>http://downloads.phoenixviewer.com/nghttp2-1.25.0.180871240-linux-180871240.tar.bz2</string> 1.674 </map> 1.675 <key>name</key> 1.676 <string>linux</string> 1.677 @@ -2706,9 +2706,9 @@ 1.678 <key>archive</key> 1.679 <map> 1.680 <key>hash</key> 1.681 - <string>c3c5ff7d2f7ac1143ef8d888192d4a53</string> 1.682 - <key>url</key> 1.683 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/9257/41579/nghttp2-1.25.0.509246-linux64-509246.tar.bz2</string> 1.684 + <string>b460d5bac2d20b38cb73b54d0ab1b6e3</string> 1.685 + <key>url</key> 1.686 + <string>http://downloads.phoenixviewer.com/nghttp2-1.25.0.180841549-linux64-180841549.tar.bz2</string> 1.687 </map> 1.688 <key>name</key> 1.689 <string>linux64</string> 1.690 @@ -2828,9 +2828,9 @@ 1.691 <key>archive</key> 1.692 <map> 1.693 <key>hash</key> 1.694 - <string>5c9d94dce4551b19790057766ff939ea</string> 1.695 - <key>url</key> 1.696 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-oggvorbis/rev/314224/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2.314224-linux-314224.tar.bz2</string> 1.697 + <string>ee185657aed3a7fcabcd9a1335a6050b</string> 1.698 + <key>url</key> 1.699 + <string>http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180871245-linux-180871245.tar.bz2</string> 1.700 </map> 1.701 <key>name</key> 1.702 <string>linux</string> 1.703 @@ -2840,9 +2840,9 @@ 1.704 <key>archive</key> 1.705 <map> 1.706 <key>hash</key> 1.707 - <string>a237c81b2c5fa3926ce04586568cce74</string> 1.708 - <key>url</key> 1.709 - <string>http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.201505150221-r32-linux-x64-201505150221-r32.tar.bz2</string> 1.710 + <string>ec5fd10d3a504e528b61d339522ca0f9</string> 1.711 + <key>url</key> 1.712 + <string>http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180841550-linux64-180841550.tar.bz2</string> 1.713 </map> 1.714 <key>name</key> 1.715 <string>linux64</string> 1.716 @@ -2894,9 +2894,9 @@ 1.717 <key>archive</key> 1.718 <map> 1.719 <key>hash</key> 1.720 - <string>a0f11d381e6daf2b4352461a75c53e89</string> 1.721 - <key>url</key> 1.722 - <string>http://downloads.phoenixviewer.com/open_libndofdev-0.8-linux-201605222023-r13.tar.bz2</string> 1.723 + <string>86cb59b79ce0aafe28d4055a17d1f748</string> 1.724 + <key>url</key> 1.725 + <string>http://downloads.phoenixviewer.com/open_libndofdev-0.3.180871824-linux-180871824.tar.bz2</string> 1.726 </map> 1.727 <key>name</key> 1.728 <string>linux</string> 1.729 @@ -2906,16 +2906,16 @@ 1.730 <key>archive</key> 1.731 <map> 1.732 <key>hash</key> 1.733 - <string>587567ef04c06b9bf746e3491dbcc556</string> 1.734 - <key>url</key> 1.735 - <string>http://downloads.phoenixviewer.com/open_libndofdev-0.8-linux-x64-201602152224-r18.tar.bz2</string> 1.736 + <string>4df349abfc942fb8e674244d1bd0a515</string> 1.737 + <key>url</key> 1.738 + <string>http://downloads.phoenixviewer.com/open_libndofdev-0.3.180841957-linux64-180841957.tar.bz2</string> 1.739 </map> 1.740 <key>name</key> 1.741 <string>linux64</string> 1.742 </map> 1.743 </map> 1.744 <key>version</key> 1.745 - <string>0.3</string> 1.746 + <string>0.3.180841957</string> 1.747 </map> 1.748 <key>openal</key> 1.749 <map> 1.750 @@ -2936,11 +2936,11 @@ 1.751 <key>archive</key> 1.752 <map> 1.753 <key>hash</key> 1.754 - <string>24b91eda3831a51c7774644016c4cb09</string> 1.755 + <string>cc0f030e6f4a78e3afd5269165c056b4</string> 1.756 <key>hash_algorithm</key> 1.757 <string>md5</string> 1.758 <key>url</key> 1.759 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openal/rev/314223/arch/Linux/installer/openal-1.12.854-1.1.0.314223-linux-314223.tar.bz2</string> 1.760 + <string>http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.180871246-linux-180871246.tar.bz2</string> 1.761 </map> 1.762 <key>name</key> 1.763 <string>linux</string> 1.764 @@ -2950,9 +2950,9 @@ 1.765 <key>archive</key> 1.766 <map> 1.767 <key>hash</key> 1.768 - <string>9ccf2c9046edd73854fc084919f507b2</string> 1.769 - <key>url</key> 1.770 - <string>http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.201505150222-r25-linux-x64-201505150222-r25.tar.bz2</string> 1.771 + <string>4f36ae378593240701fd4453bd6074c8</string> 1.772 + <key>url</key> 1.773 + <string>http://downloads.phoenixviewer.com/openal-1.12.854-1.1.0.180841552-linux64-180841552.tar.bz2</string> 1.774 </map> 1.775 <key>name</key> 1.776 <string>linux64</string> 1.777 @@ -3030,9 +3030,9 @@ 1.778 <key>archive</key> 1.779 <map> 1.780 <key>hash</key> 1.781 - <string>675c283030879d3d9c49082bfa2192eb</string> 1.782 - <key>url</key> 1.783 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Linux/installer/openjpeg-1.4.297018-linux-297018.tar.bz2</string> 1.784 + <string>cc1aca5688b00878ae94a0ad71cb4f35</string> 1.785 + <key>url</key> 1.786 + <string>http://downloads.phoenixviewer.com/openjpeg-1.5.1.180871249-linux-180871249.tar.bz2</string> 1.787 </map> 1.788 <key>name</key> 1.789 <string>linux</string> 1.790 @@ -3042,9 +3042,9 @@ 1.791 <key>archive</key> 1.792 <map> 1.793 <key>hash</key> 1.794 - <string>8b36861396af4a31668f673aebd4b1d8</string> 1.795 - <key>url</key> 1.796 - <string>http://downloads.phoenixviewer.com/jpeglib-8c.201505150200-r27-linux-x64-201505150200-r27.tar.bz2</string> 1.797 + <string>6098e555296583336b02f1a78b41b93a</string> 1.798 + <key>url</key> 1.799 + <string>http://downloads.phoenixviewer.com/openjpeg-1.5.1.180841553-linux64-180841553.tar.bz2</string> 1.800 </map> 1.801 <key>name</key> 1.802 <string>linux64</string> 1.803 @@ -3120,9 +3120,9 @@ 1.804 <key>archive</key> 1.805 <map> 1.806 <key>hash</key> 1.807 - <string>f46a601d60b7dbcfde32afc0cb64453e</string> 1.808 - <key>url</key> 1.809 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-openssl/rev/314227/arch/Linux/installer/openssl-1.0.1h.314227-linux-314227.tar.bz2</string> 1.810 + <string>343f6ace63617546704c4aad9b432312</string> 1.811 + <key>url</key> 1.812 + <string>http://downloads.phoenixviewer.com/openssl-1.0.2l.180871731-linux-180871731.tar.bz2</string> 1.813 </map> 1.814 <key>name</key> 1.815 <string>linux</string> 1.816 @@ -3132,9 +3132,9 @@ 1.817 <key>archive</key> 1.818 <map> 1.819 <key>hash</key> 1.820 - <string>d50ccfbf0c1d249392919e2c46ad8d5c</string> 1.821 - <key>url</key> 1.822 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/8339/33495/openssl-1.0.2l.508328-linux64-508328.tar.bz2</string> 1.823 + <string>7920fce93d9addf63a420d86f91c5749</string> 1.824 + <key>url</key> 1.825 + <string>http://downloads.phoenixviewer.com/openssl-1.0.2l.180841936-linux64-180841936.tar.bz2</string> 1.826 </map> 1.827 <key>name</key> 1.828 <string>linux64</string> 1.829 @@ -3210,9 +3210,9 @@ 1.830 <key>archive</key> 1.831 <map> 1.832 <key>hash</key> 1.833 - <string>24a119b18e63017ad932ad54df8161bc</string> 1.834 - <key>url</key> 1.835 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-pcre/rev/314136/arch/Linux/installer/pcre-8.35.314136-linux-314136.tar.bz2</string> 1.836 + <string>cf1c53b27e5889c7c5963ed06ab23cb2</string> 1.837 + <key>url</key> 1.838 + <string>http://downloads.phoenixviewer.com/pcre-8.35.180871234-linux-180871234.tar.bz2</string> 1.839 </map> 1.840 <key>name</key> 1.841 <string>linux</string> 1.842 @@ -3222,9 +3222,9 @@ 1.843 <key>archive</key> 1.844 <map> 1.845 <key>hash</key> 1.846 - <string>0f058ca2176e7d02d51e54c66a96f336</string> 1.847 - <key>url</key> 1.848 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/908/2010/pcre-8.35.500898-linux64-500898.tar.bz2</string> 1.849 + <string>348a6111dede9a4ddfc51049c2ff186f</string> 1.850 + <key>url</key> 1.851 + <string>http://downloads.phoenixviewer.com/pcre-8.35.180841548-linux64-180841548.tar.bz2</string> 1.852 </map> 1.853 <key>name</key> 1.854 <string>linux64</string> 1.855 @@ -3288,9 +3288,9 @@ 1.856 <key>archive</key> 1.857 <map> 1.858 <key>hash</key> 1.859 - <string>a92f2235991871c3d601a73cfef9b2af</string> 1.860 - <key>url</key> 1.861 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4105/11530/requests-1.0-linux64-504094.tar.bz2</string> 1.862 + <string>9fe44ba82ee05363fdfa4c1b9f2ec360</string> 1.863 + <key>url</key> 1.864 + <string>http://downloads.phoenixviewer.com/requests-2.18.1-linux64-180841555.tar.bz2</string> 1.865 </map> 1.866 <key>name</key> 1.867 <string>linux64</string> 1.868 @@ -3466,9 +3466,9 @@ 1.869 <key>archive</key> 1.870 <map> 1.871 <key>hash</key> 1.872 - <string>dddfc8dea540801f93ba0382cb1e3685</string> 1.873 - <key>url</key> 1.874 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Linux/installer/uriparser-0.8.0.1-linux-299435.tar.bz2</string> 1.875 + <string>6573a190dbdef9b23235beb9b1219bef</string> 1.876 + <key>url</key> 1.877 + <string>http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux-180871244.tar.bz2</string> 1.878 </map> 1.879 <key>name</key> 1.880 <string>linux</string> 1.881 @@ -3478,9 +3478,9 @@ 1.882 <key>archive</key> 1.883 <map> 1.884 <key>hash</key> 1.885 - <string>e67a27e13e546cbb13fad2665a1896b7</string> 1.886 - <key>url</key> 1.887 - <string>http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux-x64-201502251606-r15.tar.bz2</string> 1.888 + <string>df570f2b9c0087438604a8ba4dc37a85</string> 1.889 + <key>url</key> 1.890 + <string>http://downloads.phoenixviewer.com/uriparser-0.8.0.1-linux64-180841550.tar.bz2</string> 1.891 </map> 1.892 <key>name</key> 1.893 <string>linux64</string> 1.894 @@ -3574,13 +3574,25 @@ 1.895 <key>archive</key> 1.896 <map> 1.897 <key>hash</key> 1.898 - <string>8c7f32f85850248809ae811ba8e47d81</string> 1.899 - <key>url</key> 1.900 - <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/3428/8686/viewer_manager-1.0-linux-503417.tar.bz2</string> 1.901 + <string>b7167025f54c044abee21b48476ad4f2</string> 1.902 + <key>url</key> 1.903 + <string>http://downloads.phoenixviewer.com/viewer_manager-1.0.180871935-linux-180871935.tar.bz2</string> 1.904 </map> 1.905 <key>name</key> 1.906 <string>linux</string> 1.907 </map> 1.908 + <key>linux64</key> 1.909 + <map> 1.910 + <key>archive</key> 1.911 + <map> 1.912 + <key>hash</key> 1.913 + <string>129b80dd47b53bfa02fc21ab1eb1901c</string> 1.914 + <key>url</key> 1.915 + <string>http://downloads.phoenixviewer.com/viewer_manager-1.0.180861311-linux64-180861311.tar.bz2</string> 1.916 + </map> 1.917 + <key>name</key> 1.918 + <string>linux64</string> 1.919 + </map> 1.920 <key>windows</key> 1.921 <map> 1.922 <key>archive</key> 1.923 @@ -3720,9 +3732,9 @@ 1.924 <key>archive</key> 1.925 <map> 1.926 <key>hash</key> 1.927 - <string>b63f828e798287d475991134cdcfbca3</string> 1.928 - <key>url</key> 1.929 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-xmlrpc-epi/rev/314240/arch/Linux/installer/xmlrpc_epi-0.54.1.314240-linux-314240.tar.bz2</string> 1.930 + <string>0f318372198fb34b3a59b4aa03c40ac7</string> 1.931 + <key>url</key> 1.932 + <string>http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.180871731-linux-180871731.tar.bz2</string> 1.933 </map> 1.934 <key>name</key> 1.935 <string>linux</string> 1.936 @@ -3732,9 +3744,9 @@ 1.937 <key>archive</key> 1.938 <map> 1.939 <key>hash</key> 1.940 - <string>e2e5b6aba70c8fbc09ef7f12e8fb3937</string> 1.941 - <key>url</key> 1.942 - <string>http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.201505150223-r63-linux-x64-201505150223-r63.tar.bz2</string> 1.943 + <string>f810193590cae9b35a1c77b6c72bfb01</string> 1.944 + <key>url</key> 1.945 + <string>http://downloads.phoenixviewer.com/xmlrpc_epi-0.54.1.180841935-linux64-180841935.tar.bz2</string> 1.946 </map> 1.947 <key>name</key> 1.948 <string>linux64</string> 1.949 @@ -3810,11 +3822,11 @@ 1.950 <key>archive</key> 1.951 <map> 1.952 <key>hash</key> 1.953 - <string>98a8c775c581ca80bb559e8b4e8eaae7</string> 1.954 + <string>ee84398d540324533332a048f77bf08a</string> 1.955 <key>hash_algorithm</key> 1.956 <string>md5</string> 1.957 <key>url</key> 1.958 - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-zlib/rev/314131/arch/Linux/installer/zlib-1.2.8.314131-linux-314131.tar.bz2</string> 1.959 + <string>http://downloads.phoenixviewer.com/zlib-1.2.8.180871259-linux-180871259.tar.bz2</string> 1.960 </map> 1.961 <key>name</key> 1.962 <string>linux</string> 1.963 @@ -3824,9 +3836,9 @@ 1.964 <key>archive</key> 1.965 <map> 1.966 <key>hash</key> 1.967 - <string>c165dcf9bd8a27c0382137c33e1a3854</string> 1.968 - <key>url</key> 1.969 - <string>http://downloads.phoenixviewer.com/zlib-1.2.8.201505150226-r125-linux-x64-201505150226-r125.tar.bz2</string> 1.970 + <string>15a645809cb2f14074f22e7848bb42cf</string> 1.971 + <key>url</key> 1.972 + <string>http://downloads.phoenixviewer.com/zlib-1.2.8.180841547-linux64-180841547.tar.bz2</string> 1.973 </map> 1.974 <key>name</key> 1.975 <string>linux64</string> 1.976 @@ -3981,7 +3993,6 @@ 1.977 <key>name</key> 1.978 <string>Doxygen</string> 1.979 </map> 1.980 - 1.981 <key>ReleaseFS</key> 1.982 <map> 1.983 <key>configure</key> 1.984 @@ -4088,7 +4099,6 @@ 1.985 <key>name</key> 1.986 <string>RelWithDebInfoFS_open</string> 1.987 </map> 1.988 - 1.989 </map> 1.990 <key>name</key> 1.991 <string>common</string> 1.992 @@ -4147,10 +4157,6 @@ 1.993 <string>Xcode</string> 1.994 </array> 1.995 </map> 1.996 - <!-- 1.997 - <key>default</key> 1.998 - <string>True</string> 1.999 - --> 1.1000 <key>name</key> 1.1001 <string>RelWithDebInfo</string> 1.1002 </map> 1.1003 @@ -4233,7 +4239,6 @@ 1.1004 <key>name</key> 1.1005 <string>ReleaseOS</string> 1.1006 </map> 1.1007 - 1.1008 <key>RelWithDebInfoFS</key> 1.1009 <map> 1.1010 <key>build</key> 1.1011 @@ -4318,7 +4323,6 @@ 1.1012 <key>name</key> 1.1013 <string>ReleaseFS</string> 1.1014 </map> 1.1015 - 1.1016 </map> 1.1017 <key>name</key> 1.1018 <string>darwin64</string> 1.1019 @@ -4375,10 +4379,6 @@ 1.1020 <string>Unix Makefiles</string> 1.1021 </array> 1.1022 </map> 1.1023 - <!-- 1.1024 - <key>default</key> 1.1025 - <string>True</string> 1.1026 - --> 1.1027 <key>name</key> 1.1028 <string>RelWithDebInfo</string> 1.1029 </map> 1.1030 @@ -4603,10 +4603,6 @@ 1.1031 <string>${AUTOBUILD_WIN_CMAKE_GEN|NOTWIN}</string> 1.1032 </array> 1.1033 </map> 1.1034 - <!-- 1.1035 - <key>default</key> 1.1036 - <string>True</string> 1.1037 - --> 1.1038 <key>name</key> 1.1039 <string>RelWithDebInfo</string> 1.1040 </map> 1.1041 @@ -4719,7 +4715,6 @@ 1.1042 <key>name</key> 1.1043 <string>ReleaseOS</string> 1.1044 </map> 1.1045 - 1.1046 <key>RelWithDebInfoFS</key> 1.1047 <map> 1.1048 <key>build</key> 1.1049 @@ -4938,8 +4933,6 @@ 1.1050 <key>name</key> 1.1051 <string>ReleaseFS_open</string> 1.1052 </map> 1.1053 - 1.1054 - 1.1055 </map> 1.1056 <key>name</key> 1.1057 <string>windows</string>
2.1 --- a/indra/cmake/00-Common.cmake Wed Mar 21 20:23:52 2018 +0100 2.2 +++ b/indra/cmake/00-Common.cmake Sat Apr 07 14:59:44 2018 +0200 2.3 @@ -157,7 +157,7 @@ 2.4 if ( ${FORTIFY_SOURCE_RES} EQUAL 0 ) 2.5 add_definitions(-D_FORTIFY_SOURCE=2) 2.6 endif() 2.7 - set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable ${CMAKE_CXX_FLAGS}") 2.8 + set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable -Wno-placement-new ${CMAKE_CXX_FLAGS}") 2.9 2.10 # gcc 4.3 and above don't like the LL boost and also 2.11 # cause warnings due to our use of deprecated headers 2.12 @@ -180,6 +180,10 @@ 2.13 add_definitions(-std=gnu++11) 2.14 # </FS:ND> 2.15 2.16 + # <FS:ND> Enable old C++ ABI 2.17 + add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) 2.18 + # </FS:ND> 2.19 + 2.20 # force this platform to accept TOS via external browser <FS:ND> No, do not. 2.21 # add_definitions(-DEXTERNAL_TOS) 2.22 2.23 @@ -198,7 +202,8 @@ 2.24 # this stops us requiring a really recent glibc at runtime 2.25 add_compile_options(-fno-stack-protector) 2.26 # linking can be very memory-hungry, especially the final viewer link 2.27 - set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory") 2.28 + #set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory") 2.29 + set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib' -Wl,--exclude-libs,ALL") 2.30 endif (NOT USESYSTEMLIBS) 2.31 2.32 set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
3.1 --- a/indra/cmake/CEFPlugin.cmake Wed Mar 21 20:23:52 2018 +0100 3.2 +++ b/indra/cmake/CEFPlugin.cmake Sat Apr 07 14:59:44 2018 +0200 3.3 @@ -38,8 +38,8 @@ 3.4 3.5 elseif (LINUX) 3.6 set(CEF_PLUGIN_LIBRARIES 3.7 + dullahan 3.8 cef 3.9 cef_dll_wrapper.a 3.10 - dullahan 3.11 ) 3.12 endif (WINDOWS)
4.1 --- a/indra/cmake/CURL.cmake Wed Mar 21 20:23:52 2018 +0100 4.2 +++ b/indra/cmake/CURL.cmake Sat Apr 07 14:59:44 2018 +0200 4.3 @@ -1,5 +1,6 @@ 4.4 # -*- cmake -*- 4.5 include(Prebuilt) 4.6 +include(NGHTTP2) 4.7 4.8 set(CURL_FIND_QUIETLY ON) 4.9 set(CURL_FIND_REQUIRED ON) 4.10 @@ -16,7 +17,7 @@ 4.11 set(CURL_LIBRARIES libcurl.a) 4.12 if (LINUX) 4.13 list(APPEND CURL_LIBRARIES 4.14 - pthread 4.15 + pthread ${NGHTTP2_LIBRARIES} 4.16 ) 4.17 endif (LINUX) 4.18 endif (WINDOWS)
5.1 --- a/indra/cmake/FMODSTUDIO.cmake Wed Mar 21 20:23:52 2018 +0100 5.2 +++ b/indra/cmake/FMODSTUDIO.cmake Sat Apr 07 14:59:44 2018 +0200 5.3 @@ -41,15 +41,9 @@ 5.4 debug fmodL 5.5 optimized fmod) 5.6 elseif (LINUX) 5.7 - if (ADDRESS_SIZE EQUAL 32) 5.8 - set(FMODSTUDIO_LIBRARY 5.9 + set(FMODSTUDIO_LIBRARY 5.10 debug fmodL 5.11 optimized fmod) 5.12 - elseif (ADDRESS_SIZE EQUAL 64) 5.13 - set(FMODSTUDIO_LIBRARY 5.14 - debug fmodL64 5.15 - optimized fmod64) 5.16 - endif(ADDRESS_SIZE EQUAL 32) 5.17 endif (WINDOWS) 5.18 set(FMODSTUDIO_LIBRARIES ${FMODSTUDIO_LIBRARY}) 5.19 set(FMODSTUDIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodstudio)
6.1 --- a/indra/cmake/JsonCpp.cmake Wed Mar 21 20:23:52 2018 +0100 6.2 +++ b/indra/cmake/JsonCpp.cmake Sat Apr 07 14:59:44 2018 +0200 6.3 @@ -16,11 +16,7 @@ 6.4 elseif (DARWIN) 6.5 set(JSONCPP_LIBRARIES libjson_darwin_libmt.a) 6.6 elseif (LINUX) 6.7 - if ( ADDRESS_SIZE EQUAL 64 ) 6.8 - set(JSONCPP_LIBRARIES libjson_linux-gcc-4.6_libmt.a) 6.9 - else ( ) 6.10 - set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a) 6.11 - endif ( ) 6.12 + set(JSONCPP_LIBRARIES libjson_linux-gcc-4.8_libmt.a) 6.13 endif (WINDOWS) 6.14 set(JSONCPP_INCLUDE_DIR "${LIBS_PREBUILT_DIR}/include/") 6.15 endif (USESYSTEMLIBS)
7.1 --- a/indra/cmake/ViewerManager.cmake Wed Mar 21 20:23:52 2018 +0100 7.2 +++ b/indra/cmake/ViewerManager.cmake Sat Apr 07 14:59:44 2018 +0200 7.3 @@ -1,3 +1,2 @@ 7.4 include (Prebuilt) 7.5 use_prebuilt_binary(viewer-manager) 7.6 -
8.1 --- a/indra/llimage/llimageworker.cpp Wed Mar 21 20:23:52 2018 +0100 8.2 +++ b/indra/llimage/llimageworker.cpp Sat Apr 07 14:59:44 2018 +0200 8.3 @@ -131,7 +131,7 @@ 8.4 { 8.5 return true; // done (failed) 8.6 } 8.7 - if (!(mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents())) 8.8 + if (0 == (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents())) 8.9 { 8.10 return true; // done (failed) 8.11 }
9.1 --- a/indra/llprimitive/lldaeloader.cpp Wed Mar 21 20:23:52 2018 +0100 9.2 +++ b/indra/llprimitive/lldaeloader.cpp Sat Apr 07 14:59:44 2018 +0200 9.3 @@ -60,7 +60,17 @@ 9.4 #include "llsdserialize.h" 9.5 #include "lljoint.h" 9.6 9.7 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 9.8 +#pragma GCC diagnostic push 9.9 +#pragma GCC diagnostic ignored "-Wmisleading-indentation" 9.10 +#endif 9.11 + 9.12 #include "glh/glh_linear.h" 9.13 + 9.14 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 9.15 +#pragma GCC diagnostic push 9.16 +#endif 9.17 + 9.18 #include "llmatrix4a.h" 9.19 9.20
10.1 --- a/indra/llprimitive/llmodelloader.cpp Wed Mar 21 20:23:52 2018 +0100 10.2 +++ b/indra/llprimitive/llmodelloader.cpp Sat Apr 07 14:59:44 2018 +0200 10.3 @@ -29,7 +29,17 @@ 10.4 #include "lljoint.h" 10.5 #include "llcallbacklist.h" 10.6 10.7 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 10.8 +#pragma GCC diagnostic push 10.9 +#pragma GCC diagnostic ignored "-Wmisleading-indentation" 10.10 +#endif 10.11 + 10.12 #include "glh/glh_linear.h" 10.13 + 10.14 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 10.15 +#pragma GCC diagnostic push 10.16 +#endif 10.17 + 10.18 #include "llmatrix4a.h" 10.19 #include <boost/bind.hpp> 10.20
11.1 --- a/indra/llprimitive/llprimtexturelist.cpp Wed Mar 21 20:23:52 2018 +0100 11.2 +++ b/indra/llprimitive/llprimtexturelist.cpp Sat Apr 07 14:59:44 2018 +0200 11.3 @@ -137,14 +137,22 @@ 11.4 // we're changing an existing entry 11.5 llassert(mEntryList[index]); 11.6 delete (mEntryList[index]); 11.7 - if (&te) 11.8 - { 11.9 - mEntryList[index] = te.newCopy(); 11.10 - } 11.11 - else 11.12 - { 11.13 - mEntryList[index] = LLPrimTextureList::newTextureEntry(); 11.14 - } 11.15 + 11.16 + //<FS:ND> The compiler will assume te being valid as it is passed by reference and thus else will never be executed. 11.17 + // If someone really passed *nullptr in here, this will be undefined behaviour 11.18 + 11.19 + // if (&te) 11.20 + // { 11.21 + // mEntryList[index] = te.newCopy(); 11.22 + // } 11.23 + // else 11.24 + // { 11.25 + // mEntryList[index] = LLPrimTextureList::newTextureEntry(); 11.26 + // } 11.27 + 11.28 + mEntryList[index] = te.newCopy(); 11.29 + // </FS:ND> 11.30 + 11.31 return TEM_CHANGE_TEXTURE; 11.32 } 11.33
12.1 --- a/indra/llrender/llgl.h Wed Mar 21 20:23:52 2018 +0100 12.2 +++ b/indra/llrender/llgl.h Sat Apr 07 14:59:44 2018 +0200 12.3 @@ -43,8 +43,18 @@ 12.4 #include "llinstancetracker.h" 12.5 12.6 #include "llglheaders.h" 12.7 + 12.8 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 12.9 +#pragma GCC diagnostic push 12.10 +#pragma GCC diagnostic ignored "-Wmisleading-indentation" 12.11 +#endif 12.12 + 12.13 #include "glh/glh_linear.h" 12.14 12.15 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 12.16 +#pragma GCC diagnostic push 12.17 +#endif 12.18 + 12.19 extern BOOL gDebugGL; 12.20 extern BOOL gDebugSession; 12.21 extern llofstream gFailLog;
13.1 --- a/indra/llrender/llrender.h Wed Mar 21 20:23:52 2018 +0100 13.2 +++ b/indra/llrender/llrender.h Sat Apr 07 14:59:44 2018 +0200 13.3 @@ -42,8 +42,18 @@ 13.4 #include "llpointer.h" 13.5 #include "llglheaders.h" 13.6 #include "llmatrix4a.h" 13.7 + 13.8 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 13.9 +#pragma GCC diagnostic push 13.10 +#pragma GCC diagnostic ignored "-Wmisleading-indentation" 13.11 +#endif 13.12 + 13.13 #include "glh/glh_linear.h" 13.14 13.15 +#if LL_LINUX && (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ ) >= 70000 13.16 +#pragma GCC diagnostic push 13.17 +#endif 13.18 + 13.19 class LLVertexBuffer; 13.20 class LLCubeMap; 13.21 class LLImageGL;
14.1 --- a/indra/llwindow/llwindowsdl.cpp Wed Mar 21 20:23:52 2018 +0100 14.2 +++ b/indra/llwindow/llwindowsdl.cpp Sat Apr 07 14:59:44 2018 +0200 14.3 @@ -1471,10 +1471,10 @@ 14.4 if (!to) 14.5 return FALSE; 14.6 14.7 - to->mX = from.mX; 14.8 - to->mY = mWindow->h - from.mY - 1; 14.9 - 14.10 - return TRUE; 14.11 + to->mX = from.mX; 14.12 + to->mY = mWindow->h - from.mY - 1; 14.13 + 14.14 + return TRUE; 14.15 } 14.16 14.17 BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordGL* to) 14.18 @@ -1482,31 +1482,31 @@ 14.19 if (!to) 14.20 return FALSE; 14.21 14.22 - to->mX = from.mX; 14.23 - to->mY = mWindow->h - from.mY - 1; 14.24 - 14.25 - return TRUE; 14.26 + to->mX = from.mX; 14.27 + to->mY = mWindow->h - from.mY - 1; 14.28 + 14.29 + return TRUE; 14.30 } 14.31 14.32 BOOL LLWindowSDL::convertCoords(LLCoordScreen from, LLCoordWindow* to) 14.33 { 14.34 if (!to) 14.35 - return FALSE; 14.36 - 14.37 - // In the fullscreen case, window and screen coordinates are the same. 14.38 - to->mX = from.mX; 14.39 - to->mY = from.mY; 14.40 + return FALSE; 14.41 + 14.42 + // In the fullscreen case, window and screen coordinates are the same. 14.43 + to->mX = from.mX; 14.44 + to->mY = from.mY; 14.45 return (TRUE); 14.46 } 14.47 14.48 BOOL LLWindowSDL::convertCoords(LLCoordWindow from, LLCoordScreen *to) 14.49 { 14.50 if (!to) 14.51 - return FALSE; 14.52 - 14.53 - // In the fullscreen case, window and screen coordinates are the same. 14.54 - to->mX = from.mX; 14.55 - to->mY = from.mY; 14.56 + return FALSE; 14.57 + 14.58 + // In the fullscreen case, window and screen coordinates are the same. 14.59 + to->mX = from.mX; 14.60 + to->mY = from.mY; 14.61 return (TRUE); 14.62 } 14.63
15.1 --- a/indra/media_plugins/cef/CMakeLists.txt Wed Mar 21 20:23:52 2018 +0100 15.2 +++ b/indra/media_plugins/cef/CMakeLists.txt Sat Apr 07 14:59:44 2018 +0200 15.3 @@ -62,6 +62,7 @@ 15.4 # message(FATAL_ERROR "CEF plugin has been enabled for a Linux compile.\n" 15.5 # " Please create a volume_catcher implementation for this platform.") 15.6 list(APPEND media_plugin_cef_SOURCE_FILES dummy_volume_catcher.cpp) 15.7 + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../../lib'") 15.8 elseif (DARWIN) 15.9 list(APPEND media_plugin_cef_SOURCE_FILES mac_volume_catcher_null.cpp) 15.10 find_library(CORESERVICES_LIBRARY CoreServices)
16.1 --- a/indra/media_plugins/libvlc/CMakeLists.txt Wed Mar 21 20:23:52 2018 +0100 16.2 +++ b/indra/media_plugins/libvlc/CMakeLists.txt Sat Apr 07 14:59:44 2018 +0200 16.3 @@ -94,3 +94,7 @@ 16.4 ) 16.5 16.6 endif (DARWIN) 16.7 + 16.8 +if( LINUX ) 16.9 + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../../lib'") 16.10 +endif()
17.1 --- a/indra/newview/CMakeLists.txt Wed Mar 21 20:23:52 2018 +0100 17.2 +++ b/indra/newview/CMakeLists.txt Sat Apr 07 14:59:44 2018 +0200 17.3 @@ -2401,7 +2401,7 @@ 17.4 linux-crash-logger 17.5 SLPlugin 17.6 media_plugin_cef 17.7 - media_plugin_gstreamer010 17.8 + #media_plugin_gstreamer010 17.9 media_plugin_libvlc 17.10 llcommon 17.11 ) 17.12 @@ -2411,7 +2411,7 @@ 17.13 linux-crash-logger 17.14 SLPlugin 17.15 media_plugin_cef 17.16 - media_plugin_gstreamer010 17.17 + #media_plugin_gstreamer010 17.18 llcommon 17.19 ) 17.20 endif (NOT ENABLE_MEDIA_PLUGINS)
18.1 --- a/indra/newview/app_settings/settings.xml Wed Mar 21 20:23:52 2018 +0100 18.2 +++ b/indra/newview/app_settings/settings.xml Sat Apr 07 14:59:44 2018 +0200 18.3 @@ -13828,6 +13828,19 @@ 18.4 <key>Value</key> 18.5 <integer>1</integer> 18.6 </map> 18.7 + <key>FSInternalShowNavbarFavoritesPanel</key> 18.8 + <map> 18.9 + <key>Comment</key> 18.10 + <string>Internal control to show/hide navigation bar favorites panel</string> 18.11 + <key>HideFromEditor</key> 18.12 + <integer>1</integer> 18.13 + <key>Persist</key> 18.14 + <integer>0</integer> 18.15 + <key>Type</key> 18.16 + <string>Boolean</string> 18.17 + <key>Value</key> 18.18 + <integer>1</integer> 18.19 + </map> 18.20 <key>ShowNavbarNavigationPanel</key> 18.21 <map> 18.22 <key>Comment</key> 18.23 @@ -13839,6 +13852,19 @@ 18.24 <key>Value</key> 18.25 <integer>0</integer> 18.26 </map> 18.27 + <key>FSInternalShowNavbarNavigationPanel</key> 18.28 + <map> 18.29 + <key>Comment</key> 18.30 + <string>Internal control to show/hide navigation bar navigation panel</string> 18.31 + <key>HideFromEditor</key> 18.32 + <integer>1</integer> 18.33 + <key>Persist</key> 18.34 + <integer>0</integer> 18.35 + <key>Type</key> 18.36 + <string>Boolean</string> 18.37 + <key>Value</key> 18.38 + <integer>0</integer> 18.39 + </map> 18.40 <key>ShowMiniLocationPanel</key> 18.41 <map> 18.42 <key>Comment</key> 18.43 @@ -24576,6 +24602,28 @@ 18.44 <key>Value</key> 18.45 <integer>1</integer> 18.46 </map> 18.47 + <key>FSUseReadOfflineMsgsCap</key> 18.48 + <map> 18.49 + <key>Comment</key> 18.50 + <string>If enabled, use the ReadOfflineMsgsCap to request offline messages at login</string> 18.51 + <key>Persist</key> 18.52 + <integer>1</integer> 18.53 + <key>Type</key> 18.54 + <string>Boolean</string> 18.55 + <key>Value</key> 18.56 + <integer>0</integer> 18.57 + </map> 18.58 + <key>FSExperimentalRegionCrossingMovementFix</key> 18.59 + <map> 18.60 + <key>Comment</key> 18.61 + <string>If enabled, use the experimental fix for region crossing movements being bogus due to false predictions by the viewer.</string> 18.62 + <key>Persist</key> 18.63 + <integer>1</integer> 18.64 + <key>Type</key> 18.65 + <string>Boolean</string> 18.66 + <key>Value</key> 18.67 + <integer>1</integer> 18.68 + </map> 18.69 </map> 18.70 </llsd> 18.71
19.1 --- a/indra/newview/chatbar_as_cmdline.cpp Wed Mar 21 20:23:52 2018 +0100 19.2 +++ b/indra/newview/chatbar_as_cmdline.cpp Sat Apr 07 14:59:44 2018 +0200 19.3 @@ -1708,7 +1708,7 @@ 19.4 void cmdline_tp2name(const std::string& target) 19.5 { 19.6 LLUUID avkey = cmdline_partial_name2key(target); 19.7 - if (avkey.notNull()) 19.8 + if (avkey.notNull() && avkey != gAgentID) 19.9 { 19.10 LLAvatarActions::teleportTo(avkey); 19.11 }
20.1 --- a/indra/newview/daeexport.cpp Wed Mar 21 20:23:52 2018 +0100 20.2 +++ b/indra/newview/daeexport.cpp Sat Apr 07 14:59:44 2018 +0200 20.3 @@ -426,7 +426,7 @@ 20.4 else 20.5 { 20.6 // For other formats we need to decode first 20.7 - if (mFormattedImage->updateData() && (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents())) 20.8 + if (mFormattedImage->updateData() && ( (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()) != 0 ) ) 20.9 { 20.10 LLPointer<LLImageRaw> raw = new LLImageRaw; 20.11 raw->resize(mFormattedImage->getWidth(), mFormattedImage->getHeight(), mFormattedImage->getComponents());
21.1 --- a/indra/newview/fs_viewer_manifest.py Wed Mar 21 20:23:52 2018 +0100 21.2 +++ b/indra/newview/fs_viewer_manifest.py Sat Apr 07 14:59:44 2018 +0200 21.3 @@ -103,29 +103,33 @@ 21.4 21.5 self.run_command_shell( "cd %s && objcopy --add-gnu-debuglink=%s %s" % (debugDir, debugName, fileBin) ) 21.6 21.7 - if( os.path.exists( "%s/firestorm-symbols-linux.tar.bz2" % self.args['configuration'].lower()) ): 21.8 - symName = "%s/Phoenix_%s_%s_%s_symbols-linux.tar.bz2" % ( self.args['configuration'].lower(), self.fs_channel_legacy_oneword(), 21.9 - '-'.join( self.args['version'] ), self.args['viewer_flavor'] ) 21.10 + if( os.path.exists( "%s/firestorm-symbols-linux-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size)) ): 21.11 + symName = "%s/Phoenix_%s_%s_%s_symbols-linux-%d.tar.bz2" % ( self.args['configuration'].lower(), self.fs_channel_legacy_oneword(), 21.12 + '-'.join( self.args['version'] ), self.args['viewer_flavor'], self.address_size ) 21.13 print( "Saving symbols %s" % symName ) 21.14 - os.rename("%s/firestorm-symbols-linux.tar.bz2" % self.args['configuration'].lower(), symName ) 21.15 + os.rename("%s/firestorm-symbols-linux-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size), symName ) 21.16 21.17 def fs_linux_tar_excludes(self): 21.18 - return "--exclude core --exclude .debug/* --exclude .debug" 21.19 + installer_name_components = ['Phoenix',self.app_name(),self.args.get('arch'),'.'.join(self.args['version'])] 21.20 + installer_name = "_".join(installer_name_components) 21.21 + return "--exclude=%s/bin/.debug" % installer_name 21.22 21.23 def fs_save_windows_symbols(self, substitution_strings): 21.24 #AO: Try to package up symbols 21.25 # New Method, for reading cross platform stack traces on a linux/mac host 21.26 - if (os.path.exists("%s/firestorm-symbols-windows.tar.bz2" % self.args['configuration'].lower())): 21.27 + if (os.path.exists("%s/firestorm-symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(), 21.28 + self.address_size))): 21.29 # Rename to add version numbers 21.30 - sName = "%s/Phoenix_%s_%s_%s_symbols-windows.tar.bz2" % (self.args['configuration'].lower(), 21.31 + sName = "%s/Phoenix_%s_%s_%s_symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(), 21.32 self.fs_channel_legacy_oneword(), 21.33 substitution_strings['version_dashes'], 21.34 - self.args['viewer_flavor']) 21.35 + self.args['viewer_flavor'], 21.36 + self.address_size) 21.37 21.38 if os.path.exists( sName ): 21.39 os.unlink( sName ) 21.40 21.41 - os.rename("%s/firestorm-symbols-windows.tar.bz2" % self.args['configuration'].lower(), sName ) 21.42 + os.rename("%s/firestorm-symbols-windows-%d.tar.bz2" % (self.args['configuration'].lower(), self.address_size), sName ) 21.43 21.44 pdbName = "firestorm-bin.pdb" 21.45 try: 21.46 @@ -141,10 +145,11 @@ 21.47 # Store windows symbols we want to keep for debugging in a tar file, this will be later compressed with xz (lzma) 21.48 # Using tat+xz gives far superior compression than zip (~half the size of the zip archive). 21.49 # Python3 natively supports tar+xz via mode 'w:xz'. But we're stuck with Python2 for now. 21.50 - symbolTar = tarfile.TarFile("%s/Phoenix_%s_%s_%s_pdbsymbols-windows.tar" % (self.args['configuration'].lower(), 21.51 + symbolTar = tarfile.TarFile("%s/Phoenix_%s_%s_%s_pdbsymbols-windows-%d.tar" % (self.args['configuration'].lower(), 21.52 self.fs_channel_legacy_oneword(), 21.53 substitution_strings['version_dashes'], 21.54 - self.args['viewer_flavor']), 21.55 + self.args['viewer_flavor'], 21.56 + self.address_size), 21.57 'w') 21.58 symbolTar.add( "%s/Firestorm-bin.exe" % self.args['configuration'].lower(), "firestorm-bin.exe" ) 21.59 symbolTar.add( "%s/%s" % (self.args['configuration'].lower(),pdbName), pdbName )
22.1 --- a/indra/newview/fsradar.cpp Wed Mar 21 20:23:52 2018 +0100 22.2 +++ b/indra/newview/fsradar.cpp Sat Apr 07 14:59:44 2018 +0200 22.3 @@ -864,33 +864,35 @@ 22.4 } 22.5 else 22.6 { 22.7 - // <FS:TS> FIRE-20862: Teleport the configured offset 22.8 - // toward the center of the region from the 22.9 + // <FS:TS> FIRE-20862: Teleport the configured offset toward the center of the region from the 22.10 // avatar's reported position 22.11 LLViewerRegion* avreg = world->getRegionFromPosGlobal(avpos); 22.12 - LLVector3d region_center = avreg->getCenterGlobal(); 22.13 - LLVector3d offset = avpos - region_center; 22.14 - LLVector3d destination; 22.15 - F32 lateral_distance= gSavedSettings.getF32("FSTeleportToOffsetLateral"); 22.16 - F32 vertical_distance= gSavedSettings.getF32("FSTeleportToOffsetVertical"); 22.17 - if (offset.normalize() != 0.f) // there's an actual offset 22.18 - { 22.19 - if (lateral_distance > 0.0f) 22.20 - { 22.21 - offset *= lateral_distance; 22.22 - destination = avpos - offset; 22.23 + if (avreg) 22.24 + { 22.25 + LLVector3d region_center = avreg->getCenterGlobal(); 22.26 + LLVector3d offset = avpos - region_center; 22.27 + LLVector3d destination; 22.28 + F32 lateral_distance = gSavedSettings.getF32("FSTeleportToOffsetLateral"); 22.29 + F32 vertical_distance = gSavedSettings.getF32("FSTeleportToOffsetVertical"); 22.30 + if (offset.normalize() != 0.f) // there's an actual offset 22.31 + { 22.32 + if (lateral_distance > 0.0f) 22.33 + { 22.34 + offset *= lateral_distance; 22.35 + destination = avpos - offset; 22.36 + } 22.37 + else 22.38 + { 22.39 + destination = avpos; 22.40 + } 22.41 } 22.42 - else 22.43 + else // the target is exactly at the center, so the offset is 0 22.44 { 22.45 - destination = avpos; 22.46 + destination = region_center + LLVector3d(0.f, lateral_distance, 0.f); 22.47 } 22.48 + destination.mdV[VZ] = avpos.mdV[VZ] + vertical_distance; 22.49 + gAgent.teleportViaLocation(destination); 22.50 } 22.51 - else // the target is exactly at the center, so the offset is 0 22.52 - { 22.53 - destination = region_center + LLVector3d(0.f, lateral_distance, 0.f); 22.54 - } 22.55 - destination.mdV[VZ] = avpos.mdV[VZ] + vertical_distance; 22.56 - gAgent.teleportViaLocation(destination); 22.57 } 22.58 } 22.59 else
23.1 --- a/indra/newview/llappviewer.cpp Wed Mar 21 20:23:52 2018 +0100 23.2 +++ b/indra/newview/llappviewer.cpp Sat Apr 07 14:59:44 2018 +0200 23.3 @@ -323,7 +323,7 @@ 23.4 # define LL_PLATFORM_KEY "mac" 23.5 #elif LL_LINUX 23.6 # define LL_PLATFORM_KEY "lnx" 23.7 -else 23.8 +#else 23.9 # error "Unknown Platform" 23.10 #endif 23.11 const char* gPlatform = LL_PLATFORM_KEY; 23.12 @@ -1144,10 +1144,11 @@ 23.13 23.14 if (!initCache()) 23.15 { 23.16 + LL_WARNS("InitInfo") << "Failed to init cache" << LL_ENDL; 23.17 std::ostringstream msg; 23.18 msg << LLTrans::getString("MBUnableToAccessFile"); 23.19 OSMessageBox(msg.str(),LLStringUtil::null,OSMB_OK); 23.20 - return 1; 23.21 + return 0; 23.22 } 23.23 LL_INFOS("InitInfo") << "Cache initialization is done." << LL_ENDL ; 23.24 23.25 @@ -1651,7 +1652,8 @@ 23.26 // Scan keyboard for movement keys. Command keys and typing 23.27 // are handled by windows callbacks. Don't do this until we're 23.28 // done initializing. JC 23.29 - if ((gHeadlessClient || gViewerWindow->getWindow()->getVisible()) 23.30 + if (gViewerWindow 23.31 + && (gHeadlessClient || gViewerWindow->getWindow()->getVisible()) 23.32 && gViewerWindow->getActive() 23.33 && !gViewerWindow->getWindow()->getMinimized() 23.34 && LLStartUp::getStartupState() == STATE_STARTED 23.35 @@ -1690,7 +1692,7 @@ 23.36 23.37 // Render scene. 23.38 // *TODO: Should we run display() even during gHeadlessClient? DK 2011-02-18 23.39 - if (!LLApp::isExiting() && !gHeadlessClient) 23.40 + if (!LLApp::isExiting() && !gHeadlessClient && gViewerWindow) 23.41 { 23.42 pingMainloopTimeout("Main:Display"); 23.43 gGLActive = TRUE;
24.1 --- a/indra/newview/llface.cpp Wed Mar 21 20:23:52 2018 +0100 24.2 +++ b/indra/newview/llface.cpp Sat Apr 07 14:59:44 2018 +0200 24.3 @@ -1033,10 +1033,15 @@ 24.4 const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset); 24.5 const LLVector4a& normal4a = vf.mNormals[0]; 24.6 const LLVector4a& tangent = vf.mTangents[0]; 24.7 - if (!&tangent) 24.8 - { 24.9 - return; 24.10 - } 24.11 + 24.12 + // <FS:ND> tangent is a reference, compiler will always assume it's valid and skip the check due to tangent==nullptr being undefined behaviour. 24.13 + 24.14 + // if (!&tangent) 24.15 + // { 24.16 + // return; 24.17 + // } 24.18 + 24.19 + // </FS:ND> 24.20 24.21 LLVector4a binormal4a; 24.22 binormal4a.setCross3(normal4a, tangent);
25.1 --- a/indra/newview/llfilepicker.cpp Wed Mar 21 20:23:52 2018 +0100 25.2 +++ b/indra/newview/llfilepicker.cpp Sat Apr 07 14:59:44 2018 +0200 25.3 @@ -1252,13 +1252,13 @@ 25.4 static std::string add_xml_filter_to_gtkchooser(GtkWindow *picker) 25.5 { 25.6 return add_simple_pattern_filter_to_gtkchooser(picker, "*.xml", 25.7 - LLTrans::getString("xml_files") + " (*.xml)"); 25.8 + LLTrans::getString("xml_file") + " (*.xml)"); 25.9 } 25.10 25.11 static std::string add_collada_filter_to_gtkchooser(GtkWindow *picker) 25.12 { 25.13 return add_simple_pattern_filter_to_gtkchooser(picker, "*.dae", 25.14 - LLTrans::getString("scene_files") + " (*.dae)"); 25.15 + LLTrans::getString("collada_files") + " (*.dae)"); 25.16 } 25.17 25.18 static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker)
26.1 --- a/indra/newview/llimprocessing.cpp Wed Mar 21 20:23:52 2018 +0100 26.2 +++ b/indra/newview/llimprocessing.cpp Sat Apr 07 14:59:44 2018 +0200 26.3 @@ -45,6 +45,7 @@ 26.4 #include "llnotificationmanager.h" 26.5 #include "llpanelgroup.h" 26.6 #include "llregionhandle.h" 26.7 +#include "llsdserialize.h" 26.8 #include "llslurl.h" 26.9 #include "llstring.h" 26.10 #include "lltoastnotifypanel.h" 26.11 @@ -231,12 +232,12 @@ 26.12 // Strip any SLURL from the message display. (DEV-2754) 26.13 std::string msg = info->mDesc; 26.14 int indx = msg.find(" ( http://slurl.com/secondlife/"); 26.15 - if(indx == std::string::npos) 26.16 + if (indx == std::string::npos) 26.17 { 26.18 // try to find new slurl host 26.19 indx = msg.find(" ( http://maps.secondlife.com/secondlife/"); 26.20 } 26.21 - if(indx >= 0) 26.22 + if (indx >= 0) 26.23 { 26.24 LLStringUtil::truncate(msg, indx); 26.25 } 26.26 @@ -622,7 +623,8 @@ 26.27 LLVector3 position, 26.28 U8 *binary_bucket, 26.29 S32 binary_bucket_size, 26.30 - LLHost &sender) 26.31 + LLHost &sender, 26.32 + LLUUID aux_id) 26.33 { 26.34 LLChat chat; 26.35 std::string buffer; 26.36 @@ -682,7 +684,7 @@ 26.37 chat.mFromID = from_id; 26.38 chat.mFromName = name; 26.39 chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT; 26.40 - 26.41 + 26.42 if (chat.mSourceType == CHAT_SOURCE_SYSTEM) 26.43 { // Translate server message if required (MAINT-6109) 26.44 translate_if_needed(message); 26.45 @@ -720,262 +722,122 @@ 26.46 LLSD payload; 26.47 LLNotification::Params params; 26.48 26.49 - switch(dialog) 26.50 - { 26.51 - case IM_CONSOLE_AND_CHAT_HISTORY: 26.52 - args["MESSAGE"] = message; 26.53 - payload["from_id"] = from_id; 26.54 + switch (dialog) 26.55 + { 26.56 + case IM_CONSOLE_AND_CHAT_HISTORY: 26.57 + args["MESSAGE"] = message; 26.58 + payload["from_id"] = from_id; 26.59 26.60 - params.name = "IMSystemMessageTip"; 26.61 - params.substitutions = args; 26.62 - params.payload = payload; 26.63 - LLPostponedNotification::add<LLPostponedIMSystemTipNotification>(params, from_id, false); 26.64 - break; 26.65 + params.name = "IMSystemMessageTip"; 26.66 + params.substitutions = args; 26.67 + params.payload = payload; 26.68 + LLPostponedNotification::add<LLPostponedIMSystemTipNotification>(params, from_id, false); 26.69 + break; 26.70 26.71 - case IM_NOTHING_SPECIAL: // p2p IM 26.72 - // Don't show dialog, just do IM 26.73 - if (!gAgent.isGodlike() 26.74 - && gAgent.getRegion()->isPrelude() 26.75 - && to_id.isNull() ) 26.76 - { 26.77 - // do nothing -- don't distract newbies in 26.78 - // Prelude with global IMs 26.79 - } 26.80 + case IM_NOTHING_SPECIAL: // p2p IM 26.81 + // Don't show dialog, just do IM 26.82 + if (!gAgent.isGodlike() 26.83 + && gAgent.getRegion()->isPrelude() 26.84 + && to_id.isNull()) 26.85 + { 26.86 + // do nothing -- don't distract newbies in 26.87 + // Prelude with global IMs 26.88 + } 26.89 // [RLVa:KB] - Checked: RLVa-2.1.0 26.90 - else if ( (RlvActions::isRlvEnabled()) && (offline == IM_ONLINE) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) && 26.91 - (message.length() > 3) && (RLV_CMD_PREFIX == message[0]) && (RlvHandler::instance().processIMQuery(from_id, message)) ) 26.92 - { 26.93 - // Eat the message and do nothing 26.94 - return; 26.95 - } 26.96 + else if ( (RlvActions::isRlvEnabled()) && (offline == IM_ONLINE) && (!is_muted) && ((!accept_im_from_only_friend) || (is_friend)) && 26.97 + (message.length() > 3) && (RLV_CMD_PREFIX == message[0]) && (RlvHandler::instance().processIMQuery(from_id, message)) ) 26.98 + { 26.99 + // Eat the message and do nothing 26.100 + return; 26.101 + } 26.102 // [/RLVa:KB] 26.103 -// else if (offline == IM_ONLINE 26.104 -// && is_do_not_disturb 26.105 -// && from_id.notNull() //not a system message 26.106 -// && to_id.notNull()) //not global message 26.107 +// else if (offline == IM_ONLINE 26.108 +// && is_do_not_disturb 26.109 +// && from_id.notNull() //not a system message 26.110 +// && to_id.notNull()) //not global message 26.111 // [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0) 26.112 - // <FS:Ansariel> Only send the busy reponse if either the sender is not 26.113 - // muted OR the sender is muted and we explicitely want 26.114 - // to inform him about that fact. 26.115 - else if (offline == IM_ONLINE 26.116 - && (!accept_im_from_only_friend || is_friend) // is friend or accept IMs from friend only disabled 26.117 - && ((is_do_not_disturb && (!is_muted || (is_muted && !is_autorespond_muted))) || // do not disturb 26.118 - (is_autorespond && !is_muted) || // autorespond everyone 26.119 - (is_autorespond_nonfriends && !is_friend && !is_muted) || // autorespond friends only 26.120 - (is_afk && FSSendAwayAvatarResponse && !is_muted)) // away 26.121 - && from_id.notNull() //not a system message 26.122 - && to_id.notNull() //not global message 26.123 - && RlvActions::canReceiveIM(from_id)) 26.124 -// [/RLVa:KB] 26.125 - { 26.126 - // <FS:Ansariel> Log autoresponse notification after initial message 26.127 - bool has_session = true; 26.128 + // <FS:Ansariel> Only send the busy reponse if either the sender is not 26.129 + // muted OR the sender is muted and we explicitely want 26.130 + // to inform him about that fact. 26.131 + else if (offline == IM_ONLINE 26.132 + && (!accept_im_from_only_friend || is_friend) // is friend or accept IMs from friend only disabled 26.133 + && ((is_do_not_disturb && (!is_muted || (is_muted && !is_autorespond_muted))) || // do not disturb 26.134 + (is_autorespond && !is_muted) || // autorespond everyone 26.135 + (is_autorespond_nonfriends && !is_friend && !is_muted) || // autorespond friends only 26.136 + (is_afk && FSSendAwayAvatarResponse && !is_muted)) // away 26.137 + && from_id.notNull() //not a system message 26.138 + && to_id.notNull() //not global message 26.139 + && RlvActions::canReceiveIM(from_id)) 26.140 + // [/RLVa:KB] 26.141 + { 26.142 + // <FS:Ansariel> Log autoresponse notification after initial message 26.143 + bool has_session = true; 26.144 26.145 - // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open 26.146 - // Session id will be null if avatar answers from offline IM via email 26.147 - std::string response; 26.148 - if (!gIMMgr->hasSession(session_id) && session_id.notNull()) 26.149 - { 26.150 - // </FS:Ansariel> 26.151 - // <FS:Ansariel> Log autoresponse notification after initial message 26.152 - has_session = false; 26.153 - // <FS:Ansariel> FS autoresponse feature 26.154 - std::string my_name; 26.155 - LLAgentUI::buildFullname(my_name); 26.156 - if (is_do_not_disturb) 26.157 + // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open 26.158 + // Session id will be null if avatar answers from offline IM via email 26.159 + std::string response; 26.160 + if (!gIMMgr->hasSession(session_id) && session_id.notNull()) 26.161 { 26.162 - response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse"); 26.163 - } 26.164 - else if (is_autorespond_nonfriends && !is_friend) 26.165 - { 26.166 - response = gSavedPerAccountSettings.getString("FSAutorespondNonFriendsResponse"); 26.167 - } 26.168 - else if (is_autorespond) 26.169 - { 26.170 - response = gSavedPerAccountSettings.getString("FSAutorespondModeResponse"); 26.171 - } 26.172 - // <FS:PP> FIRE-10500: Autoresponse for (Away) 26.173 - else if (is_afk && FSSendAwayAvatarResponse) 26.174 - { 26.175 - response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse"); 26.176 - } 26.177 - // </FS:PP> 26.178 - else 26.179 - { 26.180 - LL_WARNS() << "Unknown auto-response mode" << LL_ENDL; 26.181 - } 26.182 - pack_instant_message( 26.183 - gMessageSystem, 26.184 - gAgent.getID(), 26.185 - FALSE, 26.186 - gAgent.getSessionID(), 26.187 - from_id, 26.188 - my_name, 26.189 - response, 26.190 - IM_ONLINE, 26.191 - IM_DO_NOT_DISTURB_AUTO_RESPONSE, 26.192 - session_id); 26.193 - gAgent.sendReliableMessage(); 26.194 - // </FS:Ansariel> FS autoresponse feature 26.195 - // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open 26.196 - } 26.197 - // </FS:Ansariel> 26.198 - 26.199 - // <FS:Ansariel> checkfor and process reqinfo 26.200 - if (has_session) 26.201 - { 26.202 - message = FSData::getInstance()->processRequestForInfo(from_id,message,name,session_id); 26.203 - } 26.204 - // </FS:Ansariel> 26.205 - 26.206 - // now store incoming IM in chat history 26.207 - 26.208 - buffer = message; 26.209 - 26.210 - LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.211 - 26.212 - // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM) 26.213 - chat.mText = buffer; 26.214 - bool keyword_alert_performed = false; 26.215 - if (FSKeywords::getInstance()->chatContainsKeyword(chat, false)) 26.216 - { 26.217 - FSKeywords::notify(chat); 26.218 - keyword_alert_performed = true; 26.219 - } 26.220 - // </FS:PP> 26.221 - 26.222 - // add to IM panel, but do not bother the user 26.223 - gIMMgr->addMessage( 26.224 - session_id, 26.225 - from_id, 26.226 - name, 26.227 - buffer, 26.228 - IM_OFFLINE == offline, 26.229 - LLStringUtil::null, 26.230 - dialog, 26.231 - parent_estate_id, 26.232 - region_id, 26.233 - position, 26.234 - true, 26.235 - false, 26.236 - keyword_alert_performed); 26.237 - 26.238 - // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open 26.239 - //if (!gIMMgr->isDNDMessageSend(session_id)) 26.240 - //{ 26.241 - // // return a standard "do not disturb" message, but only do it to online IM 26.242 - // // (i.e. not other auto responses and not store-and-forward IM) 26.243 - // send_do_not_disturb_message(msg, from_id, session_id); 26.244 - // gIMMgr->setDNDMessageSent(session_id, true); 26.245 - //} 26.246 - // </FS:Ansariel> 26.247 - 26.248 - if (!has_session) 26.249 - { 26.250 - // <FS:LO> Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix 26.251 - LLStringUtil::format_map_t args; 26.252 - args["MESSAGE"] = response; 26.253 - 26.254 - gIMMgr->addMessage( 26.255 - session_id, 26.256 - gAgentID, 26.257 - LLStringUtil::null, // Pass null value so no name gets prepended 26.258 - LLTrans::getString("IM_autoresponse_sent", args), 26.259 - false, 26.260 - name, 26.261 - IM_NOTHING_SPECIAL, 26.262 - parent_estate_id, 26.263 - region_id, 26.264 - position, 26.265 - false, 26.266 - true 26.267 - ); 26.268 - // </FS:LO> 26.269 - 26.270 - // <FS:Ansariel> Send inventory item on autoresponse 26.271 - LLUUID item_id(gSavedPerAccountSettings.getString("FSAutoresponseItemUUID")); 26.272 - if (item_id.notNull()) 26.273 - { 26.274 - LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(gInventory.getItem(item_id)); 26.275 - if (item) 26.276 + // </FS:Ansariel> 26.277 + // <FS:Ansariel> Log autoresponse notification after initial message 26.278 + has_session = false; 26.279 + // <FS:Ansariel> FS autoresponse feature 26.280 + std::string my_name; 26.281 + LLAgentUI::buildFullname(my_name); 26.282 + if (is_do_not_disturb) 26.283 { 26.284 - gIMMgr->addMessage( 26.285 - session_id, 26.286 - gAgentID, 26.287 - LLStringUtil::null, // Pass null value so no name gets prepended 26.288 - LLTrans::getString("IM_autoresponse_item_sent", LLSD().with("[ITEM_NAME]", item->getName())), 26.289 - false, 26.290 - name, 26.291 - IM_NOTHING_SPECIAL, 26.292 - parent_estate_id, 26.293 - region_id, 26.294 - position, 26.295 - false, 26.296 - true); 26.297 - LLGiveInventory::doGiveInventoryItem(from_id, item, session_id); 26.298 + response = gSavedPerAccountSettings.getString("DoNotDisturbModeResponse"); 26.299 } 26.300 + else if (is_autorespond_nonfriends && !is_friend) 26.301 + { 26.302 + response = gSavedPerAccountSettings.getString("FSAutorespondNonFriendsResponse"); 26.303 + } 26.304 + else if (is_autorespond) 26.305 + { 26.306 + response = gSavedPerAccountSettings.getString("FSAutorespondModeResponse"); 26.307 + } 26.308 + // <FS:PP> FIRE-10500: Autoresponse for (Away) 26.309 + else if (is_afk && FSSendAwayAvatarResponse) 26.310 + { 26.311 + response = gSavedPerAccountSettings.getString("FSAwayAvatarResponse"); 26.312 + } 26.313 + // </FS:PP> 26.314 + else 26.315 + { 26.316 + LL_WARNS() << "Unknown auto-response mode" << LL_ENDL; 26.317 + } 26.318 + pack_instant_message( 26.319 + gMessageSystem, 26.320 + gAgent.getID(), 26.321 + FALSE, 26.322 + gAgent.getSessionID(), 26.323 + from_id, 26.324 + my_name, 26.325 + response, 26.326 + IM_ONLINE, 26.327 + IM_DO_NOT_DISTURB_AUTO_RESPONSE, 26.328 + session_id); 26.329 + gAgent.sendReliableMessage(); 26.330 + // </FS:Ansariel> FS autoresponse feature 26.331 + // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open 26.332 } 26.333 // </FS:Ansariel> 26.334 - } 26.335 - } 26.336 - else if (from_id.isNull()) 26.337 - { 26.338 - LLSD args; 26.339 - args["MESSAGE"] = message; 26.340 - LLNotificationsUtil::add("SystemMessage", args); 26.341 - } 26.342 - else if (to_id.isNull()) 26.343 - { 26.344 - // Message to everyone from GOD, look up the fullname since 26.345 - // server always slams name to legacy names 26.346 - LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message)); 26.347 - } 26.348 - else 26.349 - { 26.350 - // standard message, not from system 26.351 - std::string saved; 26.352 - if(offline == IM_OFFLINE) 26.353 - { 26.354 - LLStringUtil::format_map_t args; 26.355 - args["[LONG_TIMESTAMP]"] = formatted_time(timestamp); 26.356 - saved = LLTrans::getString("Saved_message", args); 26.357 - } 26.358 - buffer = saved + message; 26.359 26.360 - LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.361 + // <FS:Ansariel> checkfor and process reqinfo 26.362 + if (has_session) 26.363 + { 26.364 + message = FSData::getInstance()->processRequestForInfo(from_id,message,name,session_id); 26.365 + } 26.366 + // </FS:Ansariel> 26.367 26.368 - bool mute_im = is_muted; 26.369 - if (accept_im_from_only_friend && !is_friend) 26.370 - { 26.371 - if (!gIMMgr->isNonFriendSessionNotified(session_id)) 26.372 - { 26.373 - // <FS:Ansariel> Disable this - doesn't make sense it will be skipped by LLIMMgr::addMessage() anyway 26.374 - //std::string message = LLTrans::getString("IM_unblock_only_groups_friends"); 26.375 - //gIMMgr->addMessage(session_id, from_id, name, message, IM_OFFLINE == offline); 26.376 - // </FS:Ansariel> 26.377 - gIMMgr->addNotifiedNonFriendSessionID(session_id); 26.378 - } 26.379 + // now store incoming IM in chat history 26.380 26.381 - mute_im = true; 26.382 - } 26.383 + buffer = message; 26.384 26.385 -// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0) 26.386 - // Don't block offline IMs, or IMs from Lindens 26.387 - if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) )) 26.388 - { 26.389 - if (!mute_im) 26.390 - RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id); 26.391 - message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM); 26.392 - } 26.393 -// [/RLVa:KB] 26.394 - 26.395 - if (!mute_im) 26.396 - { 26.397 - // checkfor and process reqinfo 26.398 - message = FSData::getInstance()->processRequestForInfo(from_id, message, name, session_id); 26.399 + LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.400 26.401 // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM) 26.402 - chat.mText = message; 26.403 + chat.mText = buffer; 26.404 bool keyword_alert_performed = false; 26.405 if (FSKeywords::getInstance()->chatContainsKeyword(chat, false)) 26.406 { 26.407 @@ -984,8 +846,7 @@ 26.408 } 26.409 // </FS:PP> 26.410 26.411 - buffer = saved + message; 26.412 - 26.413 + // add to IM panel, but do not bother the user 26.414 gIMMgr->addMessage( 26.415 session_id, 26.416 from_id, 26.417 @@ -1000,132 +861,339 @@ 26.418 true, 26.419 false, 26.420 keyword_alert_performed); 26.421 + 26.422 + // <FS:Ansariel> Old "do not disturb" message behavior: only send once if session not open 26.423 + //if (!gIMMgr->isDNDMessageSend(session_id)) 26.424 + //{ 26.425 + // // return a standard "do not disturb" message, but only do it to online IM 26.426 + // // (i.e. not other auto responses and not store-and-forward IM) 26.427 + // send_do_not_disturb_message(msg, from_id, session_id); 26.428 + // gIMMgr->setDNDMessageSent(session_id, true); 26.429 + //} 26.430 + // </FS:Ansariel> 26.431 + 26.432 + if (!has_session) 26.433 + { 26.434 + // <FS:LO> Fire-5389 - "Autoresponse Sent" message added to Firestorm as was in Phoenix 26.435 + LLStringUtil::format_map_t args; 26.436 + args["MESSAGE"] = response; 26.437 + 26.438 + gIMMgr->addMessage( 26.439 + session_id, 26.440 + gAgentID, 26.441 + LLStringUtil::null, // Pass null value so no name gets prepended 26.442 + LLTrans::getString("IM_autoresponse_sent", args), 26.443 + false, 26.444 + name, 26.445 + IM_NOTHING_SPECIAL, 26.446 + parent_estate_id, 26.447 + region_id, 26.448 + position, 26.449 + false, 26.450 + true 26.451 + ); 26.452 + // </FS:LO> 26.453 + 26.454 + // <FS:Ansariel> Send inventory item on autoresponse 26.455 + LLUUID item_id(gSavedPerAccountSettings.getString("FSAutoresponseItemUUID")); 26.456 + if (item_id.notNull()) 26.457 + { 26.458 + LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(gInventory.getItem(item_id)); 26.459 + if (item) 26.460 + { 26.461 + gIMMgr->addMessage( 26.462 + session_id, 26.463 + gAgentID, 26.464 + LLStringUtil::null, // Pass null value so no name gets prepended 26.465 + LLTrans::getString("IM_autoresponse_item_sent", LLSD().with("[ITEM_NAME]", item->getName())), 26.466 + false, 26.467 + name, 26.468 + IM_NOTHING_SPECIAL, 26.469 + parent_estate_id, 26.470 + region_id, 26.471 + position, 26.472 + false, 26.473 + true); 26.474 + LLGiveInventory::doGiveInventoryItem(from_id, item, session_id); 26.475 + } 26.476 + } 26.477 + // </FS:Ansariel> 26.478 + } 26.479 + } 26.480 + else if (from_id.isNull()) 26.481 + { 26.482 + LLSD args; 26.483 + args["MESSAGE"] = message; 26.484 + LLNotificationsUtil::add("SystemMessage", args); 26.485 + } 26.486 + else if (to_id.isNull()) 26.487 + { 26.488 + // Message to everyone from GOD, look up the fullname since 26.489 + // server always slams name to legacy names 26.490 + LLAvatarNameCache::get(from_id, boost::bind(god_message_name_cb, _2, chat, message)); 26.491 } 26.492 else 26.493 { 26.494 - /* 26.495 - EXT-5099 26.496 - currently there is no way to store in history only... 26.497 - using LLNotificationsUtil::add will add message to Nearby Chat 26.498 + // standard message, not from system 26.499 + std::string saved; 26.500 + if (offline == IM_OFFLINE) 26.501 + { 26.502 + LLStringUtil::format_map_t args; 26.503 + args["[LONG_TIMESTAMP]"] = formatted_time(timestamp); 26.504 + saved = LLTrans::getString("Saved_message", args); 26.505 + } 26.506 + buffer = saved + message; 26.507 26.508 - // muted user, so don't start an IM session, just record line in chat 26.509 - // history. Pretend the chat is from a local agent, 26.510 - // so it will go into the history but not be shown on screen. 26.511 + LL_DEBUGS("Messaging") << "session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.512 26.513 - LLSD args; 26.514 - args["MESSAGE"] = buffer; 26.515 - LLNotificationsUtil::add("SystemMessageTip", args); 26.516 - */ 26.517 - static LLCachedControl<bool> fsSendMutedAvatarResponse(gSavedPerAccountSettings, "FSSendMutedAvatarResponse"); 26.518 - if (fsSendMutedAvatarResponse && (!accept_im_from_only_friend || is_friend)) 26.519 + bool mute_im = is_muted; 26.520 + if (accept_im_from_only_friend && !is_friend) 26.521 { 26.522 - std::string my_name; 26.523 - LLAgentUI::buildFullname(my_name); 26.524 - std::string response = gSavedPerAccountSettings.getString("FSMutedAvatarResponse"); 26.525 - pack_instant_message( 26.526 - gMessageSystem, 26.527 - gAgent.getID(), 26.528 - FALSE, 26.529 - gAgent.getSessionID(), 26.530 - from_id, 26.531 - my_name, 26.532 - response, 26.533 - IM_ONLINE, 26.534 - IM_DO_NOT_DISTURB_AUTO_RESPONSE, 26.535 - session_id); 26.536 - gAgent.sendReliableMessage(); 26.537 + if (!gIMMgr->isNonFriendSessionNotified(session_id)) 26.538 + { 26.539 + // <FS:Ansariel> Disable this - doesn't make sense it will be skipped by LLIMMgr::addMessage() anyway 26.540 + //std::string message = LLTrans::getString("IM_unblock_only_groups_friends"); 26.541 + //gIMMgr->addMessage(session_id, from_id, name, message, IM_OFFLINE == offline); 26.542 + // </FS:Ansariel> 26.543 + gIMMgr->addNotifiedNonFriendSessionID(session_id); 26.544 + } 26.545 + 26.546 + mute_im = true; 26.547 } 26.548 26.549 - // <FS:Ansariel> Don't flash for muted IMs 26.550 - return; 26.551 +// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0) 26.552 + // Don't block offline IMs, or IMs from Lindens 26.553 + if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) )) 26.554 + { 26.555 + if (!mute_im) 26.556 + RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id); 26.557 + message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM); 26.558 + } 26.559 +// [/RLVa:KB] 26.560 + 26.561 + if (!mute_im) 26.562 + { 26.563 + // checkfor and process reqinfo 26.564 + message = FSData::getInstance()->processRequestForInfo(from_id, message, name, session_id); 26.565 + 26.566 + // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM) 26.567 + chat.mText = message; 26.568 + bool keyword_alert_performed = false; 26.569 + if (FSKeywords::getInstance()->chatContainsKeyword(chat, false)) 26.570 + { 26.571 + FSKeywords::notify(chat); 26.572 + keyword_alert_performed = true; 26.573 + } 26.574 + // </FS:PP> 26.575 + 26.576 + buffer = saved + message; 26.577 + 26.578 + gIMMgr->addMessage( 26.579 + session_id, 26.580 + from_id, 26.581 + name, 26.582 + buffer, 26.583 + IM_OFFLINE == offline, 26.584 + LLStringUtil::null, 26.585 + dialog, 26.586 + parent_estate_id, 26.587 + region_id, 26.588 + position, 26.589 + true, 26.590 + false, 26.591 + keyword_alert_performed); 26.592 + } 26.593 + else 26.594 + { 26.595 + /* 26.596 + EXT-5099 26.597 + */ 26.598 + static LLCachedControl<bool> fsSendMutedAvatarResponse(gSavedPerAccountSettings, "FSSendMutedAvatarResponse"); 26.599 + if (fsSendMutedAvatarResponse && (!accept_im_from_only_friend || is_friend)) 26.600 + { 26.601 + std::string my_name; 26.602 + LLAgentUI::buildFullname(my_name); 26.603 + std::string response = gSavedPerAccountSettings.getString("FSMutedAvatarResponse"); 26.604 + pack_instant_message( 26.605 + gMessageSystem, 26.606 + gAgent.getID(), 26.607 + FALSE, 26.608 + gAgent.getSessionID(), 26.609 + from_id, 26.610 + my_name, 26.611 + response, 26.612 + IM_ONLINE, 26.613 + IM_DO_NOT_DISTURB_AUTO_RESPONSE, 26.614 + session_id); 26.615 + gAgent.sendReliableMessage(); 26.616 + } 26.617 + 26.618 + // <FS:Ansariel> Don't flash for muted IMs 26.619 + return; 26.620 + } 26.621 } 26.622 - } 26.623 - break; 26.624 + break; 26.625 26.626 - case IM_TYPING_START: 26.627 + case IM_TYPING_START: 26.628 { 26.629 - LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem); 26.630 + std::vector<U8> bucket(binary_bucket[0], binary_bucket_size); 26.631 + LLSD data; 26.632 + data["binary_bucket"] = bucket; 26.633 + LLPointer<LLIMInfo> im_info = new LLIMInfo(from_id, 26.634 + from_group, 26.635 + to_id, 26.636 + dialog, 26.637 + agentName, 26.638 + message, 26.639 + session_id, 26.640 + parent_estate_id, 26.641 + region_id, 26.642 + position, 26.643 + data, 26.644 + offline, 26.645 + timestamp); 26.646 gIMMgr->processIMTypingStart(im_info); 26.647 } 26.648 break; 26.649 26.650 - case IM_TYPING_STOP: 26.651 + case IM_TYPING_STOP: 26.652 { 26.653 - LLPointer<LLIMInfo> im_info = new LLIMInfo(gMessageSystem); 26.654 + std::vector<U8> bucket(binary_bucket[0], binary_bucket_size); 26.655 + LLSD data; 26.656 + data["binary_bucket"] = bucket; 26.657 + LLPointer<LLIMInfo> im_info = new LLIMInfo(from_id, 26.658 + from_group, 26.659 + to_id, 26.660 + dialog, 26.661 + agentName, 26.662 + message, 26.663 + session_id, 26.664 + parent_estate_id, 26.665 + region_id, 26.666 + position, 26.667 + data, 26.668 + offline, 26.669 + timestamp); 26.670 gIMMgr->processIMTypingStop(im_info); 26.671 } 26.672 break; 26.673 26.674 - case IM_MESSAGEBOX: 26.675 + case IM_MESSAGEBOX: 26.676 { 26.677 // This is a block, modeless dialog. 26.678 args["MESSAGE"] = message; 26.679 LLNotificationsUtil::add("SystemMessageTip", args); 26.680 } 26.681 break; 26.682 - case IM_GROUP_NOTICE: 26.683 - case IM_GROUP_NOTICE_REQUESTED: 26.684 + case IM_GROUP_NOTICE: 26.685 + case IM_GROUP_NOTICE_REQUESTED: 26.686 { 26.687 LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL; 26.688 - // Read the binary bucket for more information. 26.689 - struct notice_bucket_header_t 26.690 + 26.691 + LLUUID agent_id; 26.692 + U8 has_inventory; 26.693 + U8 asset_type = 0; 26.694 + LLUUID group_id; 26.695 + std::string item_name; 26.696 + 26.697 + if (aux_id.notNull()) 26.698 { 26.699 - U8 has_inventory; 26.700 - U8 asset_type; 26.701 - LLUUID group_id; 26.702 - }; 26.703 - struct notice_bucket_full_t 26.704 + // aux_id contains group id, binary bucket contains name and asset type 26.705 + group_id = aux_id; 26.706 + has_inventory = binary_bucket_size > 1 ? TRUE : FALSE; 26.707 + from_group = TRUE; // inaccurate value correction 26.708 + if (has_inventory) 26.709 + { 26.710 + std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size); 26.711 + 26.712 + typedef boost::tokenizer<boost::char_separator<char> > tokenizer; 26.713 + boost::char_separator<char> sep("|", "", boost::keep_empty_tokens); 26.714 + tokenizer tokens(str_bucket, sep); 26.715 + tokenizer::iterator iter = tokens.begin(); 26.716 + 26.717 + asset_type = (LLAssetType::EType)(atoi((*(iter++)).c_str())); 26.718 + iter++; // wearable type if applicable, otherwise asset type 26.719 + item_name = std::string((*(iter++)).c_str()); 26.720 + // Note There is more elements in 'tokens' ... 26.721 + 26.722 + 26.723 + for (int i = 0; i < 6; i++) 26.724 + { 26.725 + LL_WARNS() << *(iter++) << LL_ENDL; 26.726 + iter++; 26.727 + } 26.728 + } 26.729 + } 26.730 + else 26.731 { 26.732 - struct notice_bucket_header_t header; 26.733 - U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE]; 26.734 - }* notice_bin_bucket; 26.735 + // All info is in binary bucket, read it for more information. 26.736 + struct notice_bucket_header_t 26.737 + { 26.738 + U8 has_inventory; 26.739 + U8 asset_type; 26.740 + LLUUID group_id; 26.741 + }; 26.742 + struct notice_bucket_full_t 26.743 + { 26.744 + struct notice_bucket_header_t header; 26.745 + U8 item_name[DB_INV_ITEM_NAME_BUF_SIZE]; 26.746 + }*notice_bin_bucket; 26.747 26.748 - // Make sure the binary bucket is big enough to hold the header 26.749 - // and a null terminated item name. 26.750 - if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8)))) 26.751 - || (binary_bucket[binary_bucket_size - 1] != '\0') ) 26.752 - { 26.753 - LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL; 26.754 - // <FS:Ansariel> Don't flash task icon 26.755 - //break; 26.756 - return; 26.757 + // Make sure the binary bucket is big enough to hold the header 26.758 + // and a null terminated item name. 26.759 + if ((binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8)))) 26.760 + || (binary_bucket[binary_bucket_size - 1] != '\0')) 26.761 + { 26.762 + LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL; 26.763 + // <FS:Ansariel> Don't flash task icon 26.764 + //break; 26.765 + return; 26.766 + } 26.767 + 26.768 + notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0]; 26.769 + has_inventory = notice_bin_bucket->header.has_inventory; 26.770 + asset_type = notice_bin_bucket->header.asset_type; 26.771 + group_id = notice_bin_bucket->header.group_id; 26.772 + item_name = ll_safe_string((const char*)notice_bin_bucket->item_name); 26.773 } 26.774 26.775 - // The group notice packet does not have an AgentID. Obtain one from the name cache. 26.776 - // If last name is "Resident" strip it out so the cache name lookup works. 26.777 - std::string::size_type index = original_name.find(" Resident"); 26.778 - if (index != std::string::npos) 26.779 + if (group_id != from_id) 26.780 { 26.781 - original_name = original_name.substr(0, index); 26.782 + agent_id = from_id; 26.783 + } 26.784 + else 26.785 + { 26.786 + S32 index = original_name.find(" Resident"); 26.787 + if (index != std::string::npos) 26.788 + { 26.789 + original_name = original_name.substr(0, index); 26.790 + } 26.791 + 26.792 + // The group notice packet does not have an AgentID. Obtain one from the name cache. 26.793 + // If last name is "Resident" strip it out so the cache name lookup works. 26.794 + std::string legacy_name = gCacheName->buildLegacyName(original_name); 26.795 + agent_id = LLAvatarNameCache::findIdByName(legacy_name); 26.796 + 26.797 + if (agent_id.isNull()) 26.798 + { 26.799 + LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL; 26.800 + } 26.801 } 26.802 26.803 - std::string legacy_name = gCacheName->buildLegacyName(original_name); 26.804 - LLUUID agent_id = LLAvatarNameCache::findIdByName(legacy_name); 26.805 - 26.806 - if (agent_id.isNull()) 26.807 - { 26.808 - LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL; 26.809 - } 26.810 - else if (LLMuteList::getInstance()->isMuted(agent_id)) 26.811 + if (agent_id.notNull() && LLMuteList::getInstance()->isMuted(agent_id)) 26.812 { 26.813 // <FS:Ansariel> Don't flash task icon 26.814 //break; 26.815 return; 26.816 } 26.817 26.818 - notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0]; 26.819 - U8 has_inventory = notice_bin_bucket->header.has_inventory; 26.820 - U8 asset_type = notice_bin_bucket->header.asset_type; 26.821 - LLUUID group_id = notice_bin_bucket->header.group_id; 26.822 - std::string item_name = ll_safe_string((const char*) notice_bin_bucket->item_name); 26.823 - 26.824 // If there is inventory, give the user the inventory offer. 26.825 LLOfferInfo* info = NULL; 26.826 26.827 if (has_inventory) 26.828 { 26.829 info = new LLOfferInfo(); 26.830 - 26.831 + 26.832 info->mIM = IM_GROUP_NOTICE; 26.833 info->mFromID = from_id; 26.834 info->mFromGroup = from_group; 26.835 @@ -1146,7 +1214,7 @@ 26.836 info->mDesc = item_name; 26.837 info->mHost = sender; 26.838 } 26.839 - 26.840 + 26.841 std::string str(message); 26.842 26.843 // Tokenize the string. 26.844 @@ -1170,7 +1238,7 @@ 26.845 payload["group_id"] = group_id; 26.846 payload["inventory_name"] = item_name; 26.847 payload["received_time"] = LLDate::now(); 26.848 - if(info && info->asLLSD()) 26.849 + if (info && info->asLLSD()) 26.850 { 26.851 payload["inventory_offer"] = info->asLLSD(); 26.852 } 26.853 @@ -1193,8 +1261,8 @@ 26.854 // Also send down the old path for now. 26.855 if (IM_GROUP_NOTICE_REQUESTED == dialog) 26.856 { 26.857 - 26.858 - LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info); 26.859 + 26.860 + LLPanelGroup::showNotice(subj, mes, group_id, has_inventory, item_name, info); 26.861 } 26.862 else 26.863 { 26.864 @@ -1202,7 +1270,7 @@ 26.865 } 26.866 } 26.867 break; 26.868 - case IM_GROUP_INVITATION: 26.869 + case IM_GROUP_INVITATION: 26.870 { 26.871 // <FS:Ansariel> FIRE-20385: Don't show group invitation for groups agent is already a member of 26.872 if (gAgent.isInGroup(from_id) && !gSavedSettings.getBOOL("FSShowJoinedGroupInvitations")) 26.873 @@ -1223,7 +1291,7 @@ 26.874 { 26.875 send_do_not_disturb_message(gMessageSystem, from_id); 26.876 } 26.877 - 26.878 + 26.879 if (!is_muted) 26.880 { 26.881 LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL; 26.882 @@ -1232,7 +1300,7 @@ 26.883 { 26.884 S32 membership_fee; 26.885 LLUUID role_id; 26.886 - }* invite_bucket; 26.887 + }*invite_bucket; 26.888 26.889 // Make sure the binary bucket is the correct size. 26.890 if (binary_bucket_size != sizeof(invite_bucket_t)) 26.891 @@ -1280,9 +1348,9 @@ 26.892 } 26.893 break; 26.894 26.895 - case IM_INVENTORY_OFFERED: 26.896 - case IM_TASK_INVENTORY_OFFERED: 26.897 - // Someone has offered us some inventory. 26.898 + case IM_INVENTORY_OFFERED: 26.899 + case IM_TASK_INVENTORY_OFFERED: 26.900 + // Someone has offered us some inventory. 26.901 { 26.902 LLOfferInfo* info = new LLOfferInfo; 26.903 if (IM_INVENTORY_OFFERED == dialog) 26.904 @@ -1291,7 +1359,7 @@ 26.905 { 26.906 S8 asset_type; 26.907 LLUUID object_id; 26.908 - }* bucketp; 26.909 + }*bucketp; 26.910 26.911 if (sizeof(offer_agent_bucket_t) != binary_bucket_size) 26.912 { 26.913 @@ -1356,54 +1424,54 @@ 26.914 } 26.915 break; 26.916 26.917 - case IM_INVENTORY_ACCEPTED: 26.918 - { 26.919 -// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();; 26.920 -// args["ORIGINAL_NAME"] = original_name; 26.921 + case IM_INVENTORY_ACCEPTED: 26.922 + { 26.923 +// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();; 26.924 +// args["ORIGINAL_NAME"] = original_name; 26.925 // [RLVa:KB] - Checked: RLVa-1.2.2 26.926 - // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open 26.927 - LLAvatarName av_name; 26.928 - bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) || 26.929 - (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id)); 26.930 - args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();; 26.931 - args["ORIGINAL_NAME"] = fRlvCanShowName ? original_name : (LLAvatarNameCache::get(from_id, &av_name) ? RlvStrings::getAnonym(av_name) : RlvStrings::getAnonym(original_name)); 26.932 + // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open 26.933 + LLAvatarName av_name; 26.934 + bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) || 26.935 + (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id)); 26.936 + args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();; 26.937 + args["ORIGINAL_NAME"] = fRlvCanShowName ? original_name : (LLAvatarNameCache::get(from_id, &av_name) ? RlvStrings::getAnonym(av_name) : RlvStrings::getAnonym(original_name)); 26.938 // [/RLVa:KB] 26.939 - LLSD payload; 26.940 - payload["from_id"] = from_id; 26.941 - // Passing the "SESSION_NAME" to use it for IM notification logging 26.942 - // in LLTipHandler::processNotification(). See STORM-941. 26.943 - payload["SESSION_NAME"] = name; 26.944 - LLNotificationsUtil::add("InventoryAccepted", args, payload); 26.945 - break; 26.946 - } 26.947 - case IM_INVENTORY_DECLINED: 26.948 - { 26.949 -// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();; 26.950 + LLSD payload; 26.951 + payload["from_id"] = from_id; 26.952 + // Passing the "SESSION_NAME" to use it for IM notification logging 26.953 + // in LLTipHandler::processNotification(). See STORM-941. 26.954 + payload["SESSION_NAME"] = name; 26.955 + LLNotificationsUtil::add("InventoryAccepted", args, payload); 26.956 + break; 26.957 + } 26.958 + case IM_INVENTORY_DECLINED: 26.959 + { 26.960 +// args["NAME"] = LLSLURL("agent", from_id, "completename").getSLURLString();; 26.961 // [RLVa:KB] - Checked: RLVa-1.2.2 26.962 - // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open 26.963 - bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) || 26.964 - (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id)); 26.965 - args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();; 26.966 + // Only anonymize the name if the agent is nearby, there isn't an open IM session to them and their profile isn't open 26.967 + bool fRlvCanShowName = (!RlvActions::isRlvEnabled()) || 26.968 + (RlvActions::canShowName(RlvActions::SNC_DEFAULT, from_id)) || (!RlvUtil::isNearbyAgent(from_id)) || (RlvUIEnabler::hasOpenProfile(from_id)) || (RlvUIEnabler::hasOpenIM(from_id)); 26.969 + args["NAME"] = LLSLURL("agent", from_id, (fRlvCanShowName) ? "completename" : "rlvanonym").getSLURLString();; 26.970 // [/RLVa:KB] 26.971 - LLSD payload; 26.972 - payload["from_id"] = from_id; 26.973 - LLNotificationsUtil::add("InventoryDeclined", args, payload); 26.974 - break; 26.975 - } 26.976 - // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856 26.977 - case IM_GROUP_VOTE: 26.978 + LLSD payload; 26.979 + payload["from_id"] = from_id; 26.980 + LLNotificationsUtil::add("InventoryDeclined", args, payload); 26.981 + break; 26.982 + } 26.983 + // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856 26.984 + case IM_GROUP_VOTE: 26.985 { 26.986 LL_WARNS("Messaging") << "Received IM: IM_GROUP_VOTE_DEPRECATED" << LL_ENDL; 26.987 } 26.988 break; 26.989 26.990 - case IM_GROUP_ELECTION_DEPRECATED: 26.991 - { 26.992 - LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL; 26.993 - } 26.994 - break; 26.995 - 26.996 - case IM_FROM_TASK: 26.997 + case IM_GROUP_ELECTION_DEPRECATED: 26.998 + { 26.999 + LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL; 26.1000 + } 26.1001 + break; 26.1002 + 26.1003 + case IM_FROM_TASK: 26.1004 { 26.1005 26.1006 if (is_do_not_disturb && !is_owned_by_me) 26.1007 @@ -1446,7 +1514,7 @@ 26.1008 // enough to check only from name (i.e. fromName = "Second Life"). For example 26.1009 // source type of messages from objects called "Second Life" should not be CHAT_SOURCE_SYSTEM. 26.1010 bool chat_from_system = (SYSTEM_FROM == name) && region_id.isNull() && position.isNull(); 26.1011 - if(chat_from_system) 26.1012 + if (chat_from_system) 26.1013 { 26.1014 // System's UUID is NULL (fixes EXT-4766) 26.1015 chat.mFromID = LLUUID::null; 26.1016 @@ -1482,9 +1550,9 @@ 26.1017 if (from_group) 26.1018 { 26.1019 query_string["groupowned"] = "true"; 26.1020 - } 26.1021 + } 26.1022 26.1023 -// chat.mURL = LLSLURL("objectim", session_id, "").getSLURLString(); 26.1024 +// chat.mURL = LLSLURL("objectim", session_id, "").getSLURLString(); 26.1025 // [SL:KB] - Checked: 2010-11-02 (RLVa-1.2.2a) | Added: RLVa-1.2.2a 26.1026 chat.mURL = LLSLURL("objectim", session_id, LLURI::mapToQueryString(query_string)).getSLURLString(); 26.1027 // [/SL:KB] 26.1028 @@ -1503,7 +1571,7 @@ 26.1029 //LLFloaterIMNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLFloaterIMNearbyChat>("nearby_chat"); 26.1030 FSFloaterNearbyChat* nearby_chat = FSFloaterNearbyChat::getInstance(); 26.1031 // </FS:Ansariel> [FS communication UI] 26.1032 - if(!chat_from_system && nearby_chat) 26.1033 + if (!chat_from_system && nearby_chat) 26.1034 { 26.1035 chat.mOwnerID = from_id; 26.1036 LLSD args; 26.1037 @@ -1525,7 +1593,7 @@ 26.1038 26.1039 //Object IMs send with from name: 'Second Life' need to be displayed also in notification toasts (EXT-1590) 26.1040 if (!chat_from_system) break; 26.1041 - 26.1042 + 26.1043 LLSD substitutions; 26.1044 substitutions["NAME"] = name; 26.1045 substitutions["MSG"] = message; 26.1046 @@ -1546,128 +1614,128 @@ 26.1047 } 26.1048 break; 26.1049 26.1050 - case IM_SESSION_SEND: // ad-hoc or group IMs 26.1051 + case IM_SESSION_SEND: // ad-hoc or group IMs 26.1052 26.1053 - // Only show messages if we have a session open (which 26.1054 - // should happen after you get an "invitation" 26.1055 + // Only show messages if we have a session open (which 26.1056 + // should happen after you get an "invitation" 26.1057 // [SL:KB] - Patch: Chat-GroupSnooze | Checked: 2012-06-16 (Catznip-3.3) 26.1058 - //if ( !gIMMgr->hasSession(session_id) ) 26.1059 - if ( (!gIMMgr->hasSession(session_id)) && 26.1060 - ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) ) 26.1061 + //if ( !gIMMgr->hasSession(session_id) ) 26.1062 + if ( (!gIMMgr->hasSession(session_id)) && 26.1063 + ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) ) 26.1064 // [/SL:KB] 26.1065 - { 26.1066 - return; 26.1067 - } 26.1068 - 26.1069 - else if (offline == IM_ONLINE && is_do_not_disturb) 26.1070 - { 26.1071 - 26.1072 - // return a standard "do not disturb" message, but only do it to online IM 26.1073 - // (i.e. not other auto responses and not store-and-forward IM) 26.1074 - if (!gIMMgr->hasSession(session_id)) 26.1075 { 26.1076 - // if there is not a panel for this conversation (i.e. it is a new IM conversation 26.1077 - // initiated by the other party) then... 26.1078 - send_do_not_disturb_message(gMessageSystem, from_id, session_id); 26.1079 + return; 26.1080 } 26.1081 26.1082 - // now store incoming IM in chat history 26.1083 + else if (offline == IM_ONLINE && is_do_not_disturb) 26.1084 + { 26.1085 26.1086 - buffer = message; 26.1087 - 26.1088 - LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.1089 + // return a standard "do not disturb" message, but only do it to online IM 26.1090 + // (i.e. not other auto responses and not store-and-forward IM) 26.1091 + if (!gIMMgr->hasSession(session_id)) 26.1092 + { 26.1093 + // if there is not a panel for this conversation (i.e. it is a new IM conversation 26.1094 + // initiated by the other party) then... 26.1095 + send_do_not_disturb_message(gMessageSystem, from_id, session_id); 26.1096 + } 26.1097 26.1098 - // add to IM panel, but do not bother the user 26.1099 - gIMMgr->addMessage( 26.1100 - session_id, 26.1101 - from_id, 26.1102 - name, 26.1103 - buffer, 26.1104 - IM_OFFLINE == offline, 26.1105 - ll_safe_string((char*)binary_bucket), 26.1106 - IM_SESSION_INVITE, 26.1107 - parent_estate_id, 26.1108 - region_id, 26.1109 - position, 26.1110 - true); 26.1111 - } 26.1112 - else 26.1113 - { 26.1114 + // now store incoming IM in chat history 26.1115 26.1116 - // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM) 26.1117 - chat.mText = message; 26.1118 - bool keyword_alert_performed = false; 26.1119 - if (FSKeywords::getInstance()->chatContainsKeyword(chat, false)) 26.1120 + buffer = message; 26.1121 + 26.1122 + LL_DEBUGS("Messaging") << "message in dnd; session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.1123 + 26.1124 + // add to IM panel, but do not bother the user 26.1125 + gIMMgr->addMessage( 26.1126 + session_id, 26.1127 + from_id, 26.1128 + name, 26.1129 + buffer, 26.1130 + IM_OFFLINE == offline, 26.1131 + ll_safe_string((char*)binary_bucket), 26.1132 + IM_SESSION_INVITE, 26.1133 + parent_estate_id, 26.1134 + region_id, 26.1135 + position, 26.1136 + true); 26.1137 + } 26.1138 + else 26.1139 { 26.1140 - FSKeywords::notify(chat); 26.1141 - keyword_alert_performed = true; 26.1142 + 26.1143 + // <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM) 26.1144 + chat.mText = message; 26.1145 + bool keyword_alert_performed = false; 26.1146 + if (FSKeywords::getInstance()->chatContainsKeyword(chat, false)) 26.1147 + { 26.1148 + FSKeywords::notify(chat); 26.1149 + keyword_alert_performed = true; 26.1150 + } 26.1151 + // </FS:PP> 26.1152 + 26.1153 + // standard message, not from system 26.1154 + std::string saved; 26.1155 + if (offline == IM_OFFLINE) 26.1156 + { 26.1157 + saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); 26.1158 + } 26.1159 + 26.1160 + buffer = saved + message; 26.1161 + 26.1162 + LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.1163 + 26.1164 + gIMMgr->addMessage( 26.1165 + session_id, 26.1166 + from_id, 26.1167 + name, 26.1168 + buffer, 26.1169 + IM_OFFLINE == offline, 26.1170 + ll_safe_string((char*)binary_bucket), 26.1171 + IM_SESSION_INVITE, 26.1172 + parent_estate_id, 26.1173 + region_id, 26.1174 + position, 26.1175 + true, 26.1176 + false, 26.1177 + keyword_alert_performed); 26.1178 } 26.1179 - // </FS:PP> 26.1180 + break; 26.1181 26.1182 - // standard message, not from system 26.1183 - std::string saved; 26.1184 - if(offline == IM_OFFLINE) 26.1185 + case IM_FROM_TASK_AS_ALERT: 26.1186 + if (is_do_not_disturb && !is_owned_by_me) 26.1187 { 26.1188 - saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); 26.1189 + return; 26.1190 } 26.1191 + { 26.1192 + // Construct a viewer alert for this message. 26.1193 + args["NAME"] = name; 26.1194 + args["MESSAGE"] = message; 26.1195 + LLNotificationsUtil::add("ObjectMessage", args); 26.1196 + } 26.1197 + break; 26.1198 + case IM_DO_NOT_DISTURB_AUTO_RESPONSE: 26.1199 + if (is_muted) 26.1200 + { 26.1201 + LL_DEBUGS("Messaging") << "Ignoring do-not-disturb response from " << from_id << LL_ENDL; 26.1202 + return; 26.1203 + } 26.1204 + else 26.1205 + { 26.1206 + // <FS:Ansariel> FIRE-12908: Add busy response indicator back to busy messages 26.1207 + //gIMMgr->addMessage(session_id, from_id, name, message); 26.1208 + buffer = llformat("(%s): %s", LLTrans::getString("BusyResponse").c_str(), message.c_str()); 26.1209 + gIMMgr->addMessage(session_id, from_id, name, buffer); 26.1210 + // </FS:Ansariel> 26.1211 + } 26.1212 + break; 26.1213 26.1214 - buffer = saved + message; 26.1215 - 26.1216 - LL_DEBUGS("Messaging") << "standard message session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; 26.1217 - 26.1218 - gIMMgr->addMessage( 26.1219 - session_id, 26.1220 - from_id, 26.1221 - name, 26.1222 - buffer, 26.1223 - IM_OFFLINE == offline, 26.1224 - ll_safe_string((char*)binary_bucket), 26.1225 - IM_SESSION_INVITE, 26.1226 - parent_estate_id, 26.1227 - region_id, 26.1228 - position, 26.1229 - true, 26.1230 - false, 26.1231 - keyword_alert_performed); 26.1232 - } 26.1233 - break; 26.1234 - 26.1235 - case IM_FROM_TASK_AS_ALERT: 26.1236 - if (is_do_not_disturb && !is_owned_by_me) 26.1237 - { 26.1238 - return; 26.1239 - } 26.1240 - { 26.1241 - // Construct a viewer alert for this message. 26.1242 - args["NAME"] = name; 26.1243 - args["MESSAGE"] = message; 26.1244 - LLNotificationsUtil::add("ObjectMessage", args); 26.1245 - } 26.1246 - break; 26.1247 - case IM_DO_NOT_DISTURB_AUTO_RESPONSE: 26.1248 - if (is_muted) 26.1249 - { 26.1250 - LL_DEBUGS("Messaging") << "Ignoring do-not-disturb response from " << from_id << LL_ENDL; 26.1251 - return; 26.1252 - } 26.1253 - else 26.1254 - { 26.1255 - // <FS:Ansariel> FIRE-12908: Add busy response indicator back to busy messages 26.1256 - //gIMMgr->addMessage(session_id, from_id, name, message); 26.1257 - buffer = llformat("(%s): %s", LLTrans::getString("BusyResponse").c_str(), message.c_str()); 26.1258 - gIMMgr->addMessage(session_id, from_id, name, buffer); 26.1259 - // </FS:Ansariel> 26.1260 - } 26.1261 - break; 26.1262 - 26.1263 - case IM_LURE_USER: 26.1264 - case IM_TELEPORT_REQUEST: 26.1265 + case IM_LURE_USER: 26.1266 + case IM_TELEPORT_REQUEST: 26.1267 { 26.1268 // [RLVa:KB] - Checked: RLVa-1.4.9 26.1269 // If we auto-accept the offer/request then this will override DnD status (but we'll still let the other party know later) 26.1270 bool fRlvAutoAccept = (rlv_handler_t::isEnabled()) && 26.1271 ( ((IM_LURE_USER == dialog) && (RlvActions::autoAcceptTeleportOffer(from_id))) || 26.1272 - ((IM_TELEPORT_REQUEST == dialog) && (RlvActions::autoAcceptTeleportRequest(from_id))) ); 26.1273 + ((IM_TELEPORT_REQUEST == dialog) && (RlvActions::autoAcceptTeleportRequest(from_id))) ); 26.1274 // [/RLVa:KB] 26.1275 26.1276 if (is_muted) 26.1277 @@ -1687,7 +1755,7 @@ 26.1278 // </FS:PP> 26.1279 else 26.1280 { 26.1281 -// if (is_do_not_disturb) 26.1282 +// if (is_do_not_disturb) 26.1283 // [RLVa:KB] - Checked: RLVa-1.4.9 26.1284 if ( (is_do_not_disturb) && (!fRlvAutoAccept) ) 26.1285 // [/RLVa:KB] 26.1286 @@ -1701,7 +1769,7 @@ 26.1287 std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size); 26.1288 std::string region_access_str = LLStringUtil::null; 26.1289 std::string region_access_icn = LLStringUtil::null; 26.1290 - std::string region_access_lc = LLStringUtil::null; 26.1291 + std::string region_access_lc = LLStringUtil::null; 26.1292 26.1293 bool canUserAccessDstRegion = true; 26.1294 bool doesUserRequireMaturityIncrease = false; 26.1295 @@ -1711,39 +1779,39 @@ 26.1296 { 26.1297 region_access_str = LLViewerRegion::accessToString(region_access); 26.1298 region_access_icn = LLViewerRegion::getAccessIcon(region_access); 26.1299 - region_access_lc = region_access_str; 26.1300 + region_access_lc = region_access_str; 26.1301 LLStringUtil::toLower(region_access_lc); 26.1302 26.1303 if (!gAgent.isGodlike()) 26.1304 { 26.1305 switch (region_access) 26.1306 { 26.1307 - case SIM_ACCESS_MIN : 26.1308 - case SIM_ACCESS_PG : 26.1309 - break; 26.1310 - case SIM_ACCESS_MATURE : 26.1311 - if (gAgent.isTeen()) 26.1312 - { 26.1313 - canUserAccessDstRegion = false; 26.1314 - } 26.1315 - else if (gAgent.prefersPG()) 26.1316 - { 26.1317 - doesUserRequireMaturityIncrease = true; 26.1318 - } 26.1319 - break; 26.1320 - case SIM_ACCESS_ADULT : 26.1321 - if (!gAgent.isAdult()) 26.1322 - { 26.1323 - canUserAccessDstRegion = false; 26.1324 - } 26.1325 - else if (!gAgent.prefersAdult()) 26.1326 - { 26.1327 - doesUserRequireMaturityIncrease = true; 26.1328 - } 26.1329 - break; 26.1330 - default : 26.1331 - llassert(0); 26.1332 - break; 26.1333 + case SIM_ACCESS_MIN: 26.1334 + case SIM_ACCESS_PG: 26.1335 + break; 26.1336 + case SIM_ACCESS_MATURE: 26.1337 + if (gAgent.isTeen()) 26.1338 + { 26.1339 + canUserAccessDstRegion = false; 26.1340 + } 26.1341 + else if (gAgent.prefersPG()) 26.1342 + { 26.1343 + doesUserRequireMaturityIncrease = true; 26.1344 + } 26.1345 + break; 26.1346 + case SIM_ACCESS_ADULT: 26.1347 + if (!gAgent.isAdult()) 26.1348 + { 26.1349 + canUserAccessDstRegion = false; 26.1350 + } 26.1351 + else if (!gAgent.prefersAdult()) 26.1352 + { 26.1353 + doesUserRequireMaturityIncrease = true; 26.1354 + } 26.1355 + break; 26.1356 + default: 26.1357 + llassert(0); 26.1358 + break; 26.1359 } 26.1360 } 26.1361 } 26.1362 @@ -1752,7 +1820,7 @@ 26.1363 if (rlv_handler_t::isEnabled()) 26.1364 { 26.1365 if ( ((IM_LURE_USER == dialog) && (!RlvActions::canAcceptTpOffer(from_id))) || 26.1366 - ((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) ) 26.1367 + ((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) ) 26.1368 { 26.1369 RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLUREREQ_REMOTE)); 26.1370 if (is_do_not_disturb) 26.1371 @@ -1762,7 +1830,7 @@ 26.1372 26.1373 // Censor message if: 1) restricted from receiving IMs from the sender, or 2) teleport offer/request and @showloc=n restricted 26.1374 if ( (!RlvActions::canReceiveIM(from_id)) || 26.1375 - ((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) ) 26.1376 + ((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) ) 26.1377 { 26.1378 message = RlvStrings::getString(RLV_STRING_HIDDEN); 26.1379 } 26.1380 @@ -1800,7 +1868,7 @@ 26.1381 LLNotification::Params params("TeleportOffered_MaturityBlocked"); 26.1382 params.substitutions = args; 26.1383 params.payload = payload; 26.1384 - LLPostponedNotification::add<LLPostponedOfferNotification>( params, from_id, false); 26.1385 + LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1386 send_simple_im(from_id, LLTrans::getString("TeleportMaturityExceeded"), IM_NOTHING_SPECIAL, session_id); 26.1387 send_simple_im(from_id, LLStringUtil::null, IM_LURE_DECLINED, session_id); 26.1388 } 26.1389 @@ -1809,7 +1877,7 @@ 26.1390 LLNotification::Params params("TeleportOffered_MaturityExceeded"); 26.1391 params.substitutions = args; 26.1392 params.payload = payload; 26.1393 - LLPostponedNotification::add<LLPostponedOfferNotification>( params, from_id, false); 26.1394 + LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1395 } 26.1396 else 26.1397 { 26.1398 @@ -1842,13 +1910,13 @@ 26.1399 LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1400 } 26.1401 // [/RLVa:KB] 26.1402 -// LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1403 +// LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1404 } 26.1405 } 26.1406 } 26.1407 break; 26.1408 26.1409 - case IM_GODLIKE_LURE_USER: 26.1410 + case IM_GODLIKE_LURE_USER: 26.1411 { 26.1412 LLVector3 pos, look_at; 26.1413 U64 region_handle(0); 26.1414 @@ -1856,7 +1924,7 @@ 26.1415 std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size); 26.1416 std::string region_access_str = LLStringUtil::null; 26.1417 std::string region_access_icn = LLStringUtil::null; 26.1418 - std::string region_access_lc = LLStringUtil::null; 26.1419 + std::string region_access_lc = LLStringUtil::null; 26.1420 26.1421 bool canUserAccessDstRegion = true; 26.1422 bool doesUserRequireMaturityIncrease = false; 26.1423 @@ -1865,39 +1933,39 @@ 26.1424 { 26.1425 region_access_str = LLViewerRegion::accessToString(region_access); 26.1426 region_access_icn = LLViewerRegion::getAccessIcon(region_access); 26.1427 - region_access_lc = region_access_str; 26.1428 + region_access_lc = region_access_str; 26.1429 LLStringUtil::toLower(region_access_lc); 26.1430 26.1431 if (!gAgent.isGodlike()) 26.1432 { 26.1433 switch (region_access) 26.1434 { 26.1435 - case SIM_ACCESS_MIN : 26.1436 - case SIM_ACCESS_PG : 26.1437 - break; 26.1438 - case SIM_ACCESS_MATURE : 26.1439 - if (gAgent.isTeen()) 26.1440 - { 26.1441 - canUserAccessDstRegion = false; 26.1442 - } 26.1443 - else if (gAgent.prefersPG()) 26.1444 - { 26.1445 - doesUserRequireMaturityIncrease = true; 26.1446 - } 26.1447 - break; 26.1448 - case SIM_ACCESS_ADULT : 26.1449 - if (!gAgent.isAdult()) 26.1450 - { 26.1451 - canUserAccessDstRegion = false; 26.1452 - } 26.1453 - else if (!gAgent.prefersAdult()) 26.1454 - { 26.1455 - doesUserRequireMaturityIncrease = true; 26.1456 - } 26.1457 - break; 26.1458 - default : 26.1459 - llassert(0); 26.1460 - break; 26.1461 + case SIM_ACCESS_MIN: 26.1462 + case SIM_ACCESS_PG: 26.1463 + break; 26.1464 + case SIM_ACCESS_MATURE: 26.1465 + if (gAgent.isTeen()) 26.1466 + { 26.1467 + canUserAccessDstRegion = false; 26.1468 + } 26.1469 + else if (gAgent.prefersPG()) 26.1470 + { 26.1471 + doesUserRequireMaturityIncrease = true; 26.1472 + } 26.1473 + break; 26.1474 + case SIM_ACCESS_ADULT: 26.1475 + if (!gAgent.isAdult()) 26.1476 + { 26.1477 + canUserAccessDstRegion = false; 26.1478 + } 26.1479 + else if (!gAgent.prefersAdult()) 26.1480 + { 26.1481 + doesUserRequireMaturityIncrease = true; 26.1482 + } 26.1483 + break; 26.1484 + default: 26.1485 + llassert(0); 26.1486 + break; 26.1487 } 26.1488 } 26.1489 } 26.1490 @@ -1920,7 +1988,7 @@ 26.1491 LLNotification::Params params("TeleportOffered_MaturityBlocked"); 26.1492 params.substitutions = args; 26.1493 params.payload = payload; 26.1494 - LLPostponedNotification::add<LLPostponedOfferNotification>( params, from_id, false); 26.1495 + LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1496 send_simple_im(from_id, LLTrans::getString("TeleportMaturityExceeded"), IM_NOTHING_SPECIAL, session_id); 26.1497 send_simple_im(from_id, LLStringUtil::null, IM_LURE_DECLINED, session_id); 26.1498 } 26.1499 @@ -1929,18 +1997,18 @@ 26.1500 LLNotification::Params params("TeleportOffered_MaturityExceeded"); 26.1501 params.substitutions = args; 26.1502 params.payload = payload; 26.1503 - LLPostponedNotification::add<LLPostponedOfferNotification>( params, from_id, false); 26.1504 + LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1505 } 26.1506 else 26.1507 { 26.1508 - // do not show a message box, because you're about to be 26.1509 - // teleported. 26.1510 - LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0); 26.1511 - } 26.1512 + // do not show a message box, because you're about to be 26.1513 + // teleported. 26.1514 + LLNotifications::instance().forceResponse(LLNotification::Params("TeleportOffered").payload(payload), 0); 26.1515 + } 26.1516 } 26.1517 break; 26.1518 26.1519 - case IM_GOTO_URL: 26.1520 + case IM_GOTO_URL: 26.1521 { 26.1522 LLSD args; 26.1523 // n.b. this is for URLs sent by the system, not for 26.1524 @@ -1960,11 +2028,11 @@ 26.1525 args["URL"] = url; 26.1526 LLSD payload; 26.1527 payload["url"] = url; 26.1528 - LLNotificationsUtil::add("GotoURL", args, payload ); 26.1529 + LLNotificationsUtil::add("GotoURL", args, payload); 26.1530 } 26.1531 break; 26.1532 26.1533 - case IM_FRIENDSHIP_OFFERED: 26.1534 + case IM_FRIENDSHIP_OFFERED: 26.1535 { 26.1536 26.1537 // <FS:PP> FIRE-15233: Automatic friendship request refusal 26.1538 @@ -2011,37 +2079,37 @@ 26.1539 26.1540 if (add_notification) 26.1541 { 26.1542 - if(message.empty()) 26.1543 - { 26.1544 - //support for frienship offers from clients before July 2008 26.1545 + if (message.empty()) 26.1546 + { 26.1547 + //support for frienship offers from clients before July 2008 26.1548 LLNotificationsUtil::add("OfferFriendshipNoMessage", args, payload); 26.1549 make_ui_sound("UISndFriendshipOffer"); // <FS:PP> Friendship offer sound 26.1550 - } 26.1551 - else 26.1552 - { 26.1553 - args["[MESSAGE]"] = message; 26.1554 - LLNotification::Params params("OfferFriendship"); 26.1555 - params.substitutions = args; 26.1556 - params.payload = payload; 26.1557 - LLPostponedNotification::add<LLPostponedOfferNotification>( params, from_id, false); 26.1558 - make_ui_sound("UISndFriendshipOffer"); // <FS:PP> Friendship offer sound 26.1559 + } 26.1560 + else 26.1561 + { 26.1562 + args["[MESSAGE]"] = message; 26.1563 + LLNotification::Params params("OfferFriendship"); 26.1564 + params.substitutions = args; 26.1565 + params.payload = payload; 26.1566 + LLPostponedNotification::add<LLPostponedOfferNotification>(params, from_id, false); 26.1567 + make_ui_sound("UISndFriendshipOffer"); // <FS:PP> Friendship offer sound 26.1568 + } 26.1569 } 26.1570 } 26.1571 } 26.1572 - } 26.1573 break; 26.1574 26.1575 - case IM_FRIENDSHIP_ACCEPTED: 26.1576 + case IM_FRIENDSHIP_ACCEPTED: 26.1577 { 26.1578 // In the case of an offline IM, the formFriendship() may be extraneous 26.1579 // as the database should already include the relationship. But it 26.1580 // doesn't hurt for dupes. 26.1581 LLAvatarTracker::formFriendship(from_id); 26.1582 - 26.1583 + 26.1584 std::vector<std::string> strings; 26.1585 strings.push_back(from_id.asString()); 26.1586 send_generic_message("requestonlinenotification", strings); 26.1587 - 26.1588 + 26.1589 args["NAME"] = name; 26.1590 LLSD payload; 26.1591 payload["from_id"] = from_id; 26.1592 @@ -2049,11 +2117,11 @@ 26.1593 } 26.1594 break; 26.1595 26.1596 - case IM_FRIENDSHIP_DECLINED_DEPRECATED: 26.1597 - default: 26.1598 - LL_WARNS("Messaging") << "Instant message calling for unknown dialog " 26.1599 + case IM_FRIENDSHIP_DECLINED_DEPRECATED: 26.1600 + default: 26.1601 + LL_WARNS("Messaging") << "Instant message calling for unknown dialog " 26.1602 << (S32)dialog << LL_ENDL; 26.1603 - break; 26.1604 + break; 26.1605 } 26.1606 26.1607 LLWindow* viewer_window = gViewerWindow->getWindow(); 26.1608 @@ -2082,7 +2150,7 @@ 26.1609 // Auto-accepted inventory items may require the avatar object 26.1610 // to build a correct name. Likewise, inventory offers from 26.1611 // muted avatars require the mute list to properly mute. 26.1612 - if (cap_url.empty()) 26.1613 + if (cap_url.empty() || !gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap")) 26.1614 { 26.1615 requestOfflineMessagesLegacy(); 26.1616 } 26.1617 @@ -2109,7 +2177,7 @@ 26.1618 26.1619 if (!status) // success = httpResults["success"].asBoolean(); 26.1620 { 26.1621 - LL_WARNS() << "Error requesting offline messages via capability " << url << ", Status: " << status.toString() << "\nFalling back to legacy method." << LL_ENDL; 26.1622 + LL_WARNS("Messaging") << "Error requesting offline messages via capability " << url << ", Status: " << status.toString() << "\nFalling back to legacy method." << LL_ENDL; 26.1623 26.1624 requestOfflineMessagesLegacy(); 26.1625 return; 26.1626 @@ -2119,10 +2187,11 @@ 26.1627 26.1628 if (!contents.size()) 26.1629 { 26.1630 - LL_WARNS() << "No contents received for offline messages via capability " << url << LL_ENDL; 26.1631 + LL_WARNS("Messaging") << "No contents received for offline messages via capability " << url << LL_ENDL; 26.1632 return; 26.1633 } 26.1634 26.1635 + // Todo: once dirtsim-369 releases, remove one of the map/array options 26.1636 LLSD messages; 26.1637 if (contents.isArray()) 26.1638 { 26.1639 @@ -2134,16 +2203,24 @@ 26.1640 } 26.1641 else 26.1642 { 26.1643 - LL_WARNS() << "Invalid offline message content received via capability " << url << LL_ENDL; 26.1644 + LL_WARNS("Messaging") << "Invalid offline message content received via capability " << url << LL_ENDL; 26.1645 return; 26.1646 } 26.1647 26.1648 if (!messages.isArray()) 26.1649 { 26.1650 - LL_WARNS() << "Invalid offline message content received via capability " << url << LL_ENDL; 26.1651 + LL_WARNS("Messaging") << "Invalid offline message content received via capability " << url << LL_ENDL; 26.1652 return; 26.1653 } 26.1654 26.1655 + if (messages.emptyArray()) 26.1656 + { 26.1657 + // Nothing to process 26.1658 + return; 26.1659 + } 26.1660 + 26.1661 + LL_INFOS("Messaging") << "Processing offline messages." << LL_ENDL; 26.1662 + 26.1663 std::vector<U8> data; 26.1664 S32 binary_bucket_size = 0; 26.1665 LLHost sender = gAgent.getRegion()->getHost(); 26.1666 @@ -2153,17 +2230,29 @@ 26.1667 for (; i != iEnd; ++i) 26.1668 { 26.1669 const LLSD &message_data(*i); 26.1670 + 26.1671 LLVector3 position(message_data["local_x"].asReal(), message_data["local_y"].asReal(), message_data["local_z"].asReal()); 26.1672 data = message_data["binary_bucket"].asBinary(); 26.1673 - binary_bucket_size = data.size(); // message_data["count"] == data.size() - 1 due to ('\0') 26.1674 - U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["ParentEstateID"].asInteger() : 1; // 1 - IMMainland 26.1675 + binary_bucket_size = data.size(); // message_data["count"] always 0 26.1676 + U32 parent_estate_id = message_data.has("parent_estate_id") ? message_data["parent_estate_id"].asInteger() : 1; // 1 - IMMainland 26.1677 + 26.1678 + // Todo: once dirtsim-369 releases, remove one of the int/str options 26.1679 + BOOL from_group; 26.1680 + if (message_data["from_group"].isInteger()) 26.1681 + { 26.1682 + from_group = message_data["from_group"].asInteger(); 26.1683 + } 26.1684 + else 26.1685 + { 26.1686 + from_group = message_data["from_group"].asString() == "Y"; 26.1687 + } 26.1688 26.1689 LLIMProcessing::processNewMessage(message_data["from_agent_id"].asUUID(), 26.1690 - message_data["from_group"].asInteger(), // BOOL 26.1691 + from_group, 26.1692 message_data["to_agent_id"].asUUID(), 26.1693 IM_OFFLINE, 26.1694 (EInstantMessage)message_data["dialog"].asInteger(), 26.1695 - message_data["session_id"].asUUID(), 26.1696 + LLUUID::null, // session id, fix this for friendship offers to work 26.1697 message_data["timestamp"].asInteger(), 26.1698 message_data["from_agent_name"].asString(), 26.1699 message_data["message"].asString(), 26.1700 @@ -2172,12 +2261,15 @@ 26.1701 position, 26.1702 &data[0], 26.1703 binary_bucket_size, 26.1704 - sender); 26.1705 + sender, 26.1706 + message_data["asset_id"].asUUID()); // not necessarily an asset 26.1707 } 26.1708 } 26.1709 26.1710 void LLIMProcessing::requestOfflineMessagesLegacy() 26.1711 { 26.1712 + LL_INFOS("Messaging") << "Requesting offline messages (Legacy)." << LL_ENDL; 26.1713 + 26.1714 LLMessageSystem* msg = gMessageSystem; 26.1715 msg->newMessageFast(_PREHASH_RetrieveInstantMessages); 26.1716 msg->nextBlockFast(_PREHASH_AgentData);
27.1 --- a/indra/newview/llimprocessing.h Wed Mar 21 20:23:52 2018 +0100 27.2 +++ b/indra/newview/llimprocessing.h Sat Apr 07 14:59:44 2018 +0200 27.3 @@ -47,7 +47,8 @@ 27.4 LLVector3 position, 27.5 U8 *binary_bucket, 27.6 S32 binary_bucket_size, 27.7 - LLHost &sender); 27.8 + LLHost &sender, 27.9 + LLUUID aux_id = LLUUID::null); 27.10 27.11 // Either receives list of offline messages from 'ReadOfflineMsgs' capability 27.12 // or uses legacy method
28.1 --- a/indra/newview/llmediactrl.cpp Wed Mar 21 20:23:52 2018 +0100 28.2 +++ b/indra/newview/llmediactrl.cpp Sat Apr 07 14:59:44 2018 +0200 28.3 @@ -827,21 +827,6 @@ 28.4 S32 x_offset, y_offset, width, height; 28.5 calcOffsetsAndSize(&x_offset, &y_offset, &width, &height); 28.6 28.7 -#if 0 28.8 - // <FS:ND> Flip Y-Axis of media texture 28.9 - U32 mode = gGL.getMatrixMode(); 28.10 - gGL.matrixMode(LLRender::MM_TEXTURE0); 28.11 - 28.12 - F32 aMatrix[16] = { 1.0f, 0.0f, 0.0f, 0.0f, 28.13 - 0.0f, -1.0f, 0.0f, 0.0f, 28.14 - 0.0f, 0.0f, 1.0f, 0.0f, 28.15 - 0.0f, max_v, 0.0f, 1.0f 28.16 - }; 28.17 - gGL.pushMatrix(); 28.18 - gGL.loadMatrix( aMatrix ); 28.19 - gGL.matrixMode(mode); 28.20 - // </FS:ND> 28.21 -#endif 28.22 // draw the browser 28.23 // <FS:Ansariel> Remove QUADS rendering mode 28.24 //gGL.begin( LLRender::QUADS ); 28.25 @@ -894,13 +879,6 @@ 28.26 gGL.vertex2i( x_offset + width, y_offset ); 28.27 } 28.28 gGL.end(); 28.29 -#if 0 28.30 - // <FS:ND> Restore matrix for texture 0 28.31 - gGL.matrixMode(LLRender::MM_TEXTURE0); 28.32 - gGL.popMatrix(); 28.33 - gGL.matrixMode( mode ); 28.34 - // </FS:ND> 28.35 -#endif 28.36 } 28.37 gGL.popUIMatrix(); 28.38
29.1 --- a/indra/newview/llmediadataclient.cpp Wed Mar 21 20:23:52 2018 +0100 29.2 +++ b/indra/newview/llmediadataclient.cpp Sat Apr 07 14:59:44 2018 +0200 29.3 @@ -204,7 +204,7 @@ 29.4 if (std::find_if(mUnQueuedRequests.begin(), mUnQueuedRequests.end(), upred) != mUnQueuedRequests.end()) 29.5 return true; 29.6 29.7 - return false; 29.8 + return false; 29.9 } 29.10 29.11 void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object) 29.12 @@ -815,14 +815,14 @@ 29.13 29.14 bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object) 29.15 { 29.16 - // First, call parent impl. 29.17 - if(LLMediaDataClient::isInQueue(object)) 29.18 - return true; 29.19 + // First, call parent impl. 29.20 + if(LLMediaDataClient::isInQueue(object)) 29.21 + return true; 29.22 29.23 if (std::find_if(mRoundRobinQueue.begin(), mRoundRobinQueue.end(), PredicateMatchRequest(object->getID())) != mRoundRobinQueue.end()) 29.24 return true; 29.25 29.26 - return false; 29.27 + return false; 29.28 } 29.29 29.30 void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
30.1 --- a/indra/newview/llstartup.cpp Wed Mar 21 20:23:52 2018 +0100 30.2 +++ b/indra/newview/llstartup.cpp Sat Apr 07 14:59:44 2018 +0200 30.3 @@ -557,6 +557,13 @@ 30.4 // true when all initialization done. 30.5 bool idle_startup() 30.6 { 30.7 + if (gViewerWindow == NULL) 30.8 + { 30.9 + // We expect window to be initialized 30.10 + LL_WARNS_ONCE() << "gViewerWindow is not initialized" << LL_ENDL; 30.11 + return false; // No world yet 30.12 + } 30.13 + 30.14 const F32 PRECACHING_DELAY = gSavedSettings.getF32("PrecachingDelay"); 30.15 static LLTimer timeout; 30.16 30.17 @@ -643,6 +650,11 @@ 30.18 gSavedSettings.setString("FSInternalSkinCurrentTheme", gSavedSettings.getString("FSSkinCurrentThemeReadableName")); 30.19 // </FS:Ansariel> 30.20 30.21 + // <FS:Ansariel> Notification not showing if hiding the UI 30.22 + gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", gSavedSettings.getBOOL("ShowNavbarNavigationPanel")); 30.23 + gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel")); 30.24 + // </FS:Ansariel> 30.25 + 30.26 if (LLFeatureManager::getInstance()->isSafe()) 30.27 { 30.28 LLNotificationsUtil::add("DisplaySetToSafe");
31.1 --- a/indra/newview/llviewercontrol.cpp Wed Mar 21 20:23:52 2018 +0100 31.2 +++ b/indra/newview/llviewercontrol.cpp Sat Apr 07 14:59:44 2018 +0200 31.3 @@ -919,6 +919,14 @@ 31.4 } 31.5 // </FS:Ansariel> 31.6 31.7 +// <FS:Ansariel> Notification not showing if hiding the UI 31.8 +void handleNavbarSettingsChanged() 31.9 +{ 31.10 + gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", gSavedSettings.getBOOL("ShowNavbarNavigationPanel")); 31.11 + gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel")); 31.12 +} 31.13 +// </FS:Ansariel> 31.14 + 31.15 // <FS:Ansariel> FIRE-20288: Option to render friends only 31.16 void handleRenderFriendsOnlyChanged(const LLSD& newvalue) 31.17 { 31.18 @@ -1167,6 +1175,11 @@ 31.19 31.20 // <FS:Ansariel> FIRE-20288: Option to render friends only 31.21 gSavedPerAccountSettings.getControl("FSRenderFriendsOnly")->getSignal()->connect(boost::bind(&handleRenderFriendsOnlyChanged, _2)); 31.22 + 31.23 + // <FS:Ansariel> Notification not showing if hiding the UI 31.24 + gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged)); 31.25 + gSavedSettings.getControl("ShowNavbarNavigationPanel")->getSignal()->connect(boost::bind(&handleNavbarSettingsChanged)); 31.26 + // </FS:Ansariel> 31.27 } 31.28 31.29 #if TEST_CACHED_CONTROL
32.1 --- a/indra/newview/llviewerobject.cpp Wed Mar 21 20:23:52 2018 +0100 32.2 +++ b/indra/newview/llviewerobject.cpp Sat Apr 07 14:59:44 2018 +0200 32.3 @@ -2660,20 +2660,24 @@ 32.4 // Extrapolation across region boundaries is almost always wrong, and if the region being 32.5 // entered is slow to respond, very wrong. 32.6 // Probably don't need edge of world check below any more since we are clipping the predictor to the region. 32.7 - bool clipped; // true if clipped at boundary 32.8 - LLVector3d clip_pos_global_region = LLWorld::getInstance()->clipToRegion(mRegionp,old_pos_global, new_pos_global, clipped); 32.9 - if (clipped) 32.10 + static LLCachedControl<bool> fsExperimentalRegionCrossingMovementFix(gSavedSettings, "FSExperimentalRegionCrossingMovementFix"); 32.11 + if (fsExperimentalRegionCrossingMovementFix) 32.12 { 32.13 - // Was clipped, so we crossed a region boundary 32.14 - //LL_INFOS() << "Beyond region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global_region) 32.15 - // << " from [" << getPositionRegion() << " .. " << new_pos << "]" << LL_ENDL; 32.16 - new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global_region); 32.17 - // Don't zero out velocity on the server. Telling the server affects scripts and audio. 32.18 - //new_v.clear(); 32.19 - //setAcceleration(LLVector3::zero); // stop linear acceleration 32.20 - LLVector3 new_angv; 32.21 - new_angv.clear(); 32.22 - setAngularVelocity(new_angv); // stop rotation 32.23 + bool clipped; // true if clipped at boundary 32.24 + LLVector3d clip_pos_global_region = LLWorld::getInstance()->clipToRegion(mRegionp, old_pos_global, new_pos_global, clipped); 32.25 + if (clipped) 32.26 + { 32.27 + // Was clipped, so we crossed a region boundary 32.28 + //LL_INFOS() << "Beyond region edge, clipped predicted position to " << mRegionp->getPosRegionFromGlobal(clip_pos_global_region) 32.29 + // << " from [" << getPositionRegion() << " .. " << new_pos << "]" << LL_ENDL; 32.30 + new_pos = mRegionp->getPosRegionFromGlobal(clip_pos_global_region); 32.31 + // Don't zero out velocity on the server. Telling the server affects scripts and audio. 32.32 + //new_v.clear(); 32.33 + //setAcceleration(LLVector3::zero); // stop linear acceleration 32.34 + LLVector3 new_angv; 32.35 + new_angv.clear(); 32.36 + setAngularVelocity(new_angv); // stop rotation 32.37 + } 32.38 } 32.39 // </FS> 32.40
33.1 --- a/indra/newview/llviewershadermgr.cpp Wed Mar 21 20:23:52 2018 +0100 33.2 +++ b/indra/newview/llviewershadermgr.cpp Sat Apr 07 14:59:44 2018 +0200 33.3 @@ -2829,6 +2829,7 @@ 33.4 gSkinnedObjectSimpleWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER; 33.5 gSkinnedObjectSimpleWaterProgram.mFeatures.hasObjectSkinning = true; 33.6 gSkinnedObjectSimpleWaterProgram.mFeatures.disableTextureIndex = true; 33.7 + gSkinnedObjectSimpleWaterProgram.mFeatures.hasAlphaMask = true; 33.8 gSkinnedObjectSimpleWaterProgram.mShaderFiles.clear(); 33.9 gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); 33.10 gSkinnedObjectSimpleWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
34.1 --- a/indra/newview/llviewerwindow.cpp Wed Mar 21 20:23:52 2018 +0100 34.2 +++ b/indra/newview/llviewerwindow.cpp Sat Apr 07 14:59:44 2018 +0200 34.3 @@ -6854,6 +6854,10 @@ 34.4 34.5 // <FS:Ansariel> Notification not showing if hiding the UI 34.6 FSNearbyChat::instance().showDefaultChatBar(visible && !gSavedSettings.getBOOL("AutohideChatBar")); 34.7 + gSavedSettings.setBOOL("FSInternalShowNavbarNavigationPanel", visible && gSavedSettings.getBOOL("ShowNavbarNavigationPanel")); 34.8 + gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", visible && gSavedSettings.getBOOL("ShowNavbarFavoritesPanel")); 34.9 + mRootView->getChildView("chiclet_container")->setVisible(visible); 34.10 + // </FS:Ansariel> 34.11 34.12 // <FS:Zi> Is done inside XUI now, using visibility_control 34.13 //LLNavigationBar::getInstance()->setVisible(visible ? gSavedSettings.getBOOL("ShowNavbarNavigationPanel") : FALSE);
35.1 --- a/indra/newview/llvoicevivox.cpp Wed Mar 21 20:23:52 2018 +0100 35.2 +++ b/indra/newview/llvoicevivox.cpp Sat Apr 07 14:59:44 2018 +0200 35.3 @@ -785,7 +785,10 @@ 35.4 bool LLVivoxVoiceClient::startAndLaunchDaemon() 35.5 { 35.6 //--------------------------------------------------------------------- 35.7 - if (!voiceEnabled()) 35.8 + // </FS:Ansariel> Bypass cached controls 35.9 + //if (!voiceEnabled()) 35.10 + if (!voiceEnabled(true)) 35.11 + // </FS:Ansariel> 35.12 { 35.13 // Voice is locked out, we must not launch the vivox daemon. 35.14 return false;
36.1 --- a/indra/newview/llvovolume.cpp Wed Mar 21 20:23:52 2018 +0100 36.2 +++ b/indra/newview/llvovolume.cpp Sat Apr 07 14:59:44 2018 +0200 36.3 @@ -4569,11 +4569,6 @@ 36.4 { //texture animation breaks batches 36.5 return false; 36.6 } 36.7 - 36.8 - if( facep->mTextureMatrix && 36.9 - ( ( facep->getTextureEntry() && facep->getTextureEntry()->hasMedia() ) || 36.10 - ( facep->getTexture() && facep->getTexture()->getType() == LLViewerTexture::MEDIA_TEXTURE ) ) ) 36.11 - return false; 36.12 36.13 return true; 36.14 } 36.15 @@ -4687,13 +4682,6 @@ 36.16 tex_mat = facep->mTextureMatrix; 36.17 } 36.18 36.19 - // <FS:ND> CEF: if this is a face with media, then use the texture matrix to flip the texture 36.20 - if( facep->mTextureMatrix && 36.21 - ( ( facep->getTextureEntry() && facep->getTextureEntry()->hasMedia() ) || 36.22 - ( facep->getTexture() && facep->getTexture()->getType() == LLViewerTexture::MEDIA_TEXTURE ) ) ) 36.23 - tex_mat = facep->mTextureMatrix; 36.24 - // </FS:ND> 36.25 - 36.26 const LLMatrix4* model_mat = NULL; 36.27 36.28 LLDrawable* drawable = facep->getDrawable();
37.1 --- a/indra/newview/llworld.cpp Wed Mar 21 20:23:52 2018 +0100 37.2 +++ b/indra/newview/llworld.cpp Sat Apr 07 14:59:44 2018 +0200 37.3 @@ -787,6 +787,8 @@ 37.4 // If start_pos is outside the region, use start_pos. 37.5 LLVector3d LLWorld::clipToRegion(const LLViewerRegion* regionp, const LLVector3d &start_pos, const LLVector3d &end_pos, bool &clipped) 37.6 { 37.7 + static LLCachedControl<bool> fsExperimentalRegionCrossingMovementFix(gSavedSettings, "FSExperimentalRegionCrossingMovementFix"); 37.8 + 37.9 clipped = false; // no clipping yet 37.10 if (!regionp) // no region. We're lost 37.11 { 37.12 @@ -808,8 +810,9 @@ 37.13 // </FS> 37.14 F32 region_width = regionp->getWidth(); 37.15 // <FS> FIRE-21915: Fix bogus avatar movement on region crossing 37.16 - if (region_coord_start.mV[VX] < 0.f || region_coord_start.mV[VX] > region_width 37.17 - || region_coord_start.mV[VY] < 0.f || region_coord_start.mV[VY] > region_width) 37.18 + if (fsExperimentalRegionCrossingMovementFix && 37.19 + (region_coord_start.mV[VX] < 0.f || region_coord_start.mV[VX] > region_width 37.20 + || region_coord_start.mV[VY] < 0.f || region_coord_start.mV[VY] > region_width)) 37.21 { 37.22 clip_factor = 1.0; // start pos outside region, use start pos 37.23 } 37.24 @@ -853,8 +856,14 @@ 37.25 clip_factor = (region_coord.mV[VY] - region_width) / delta_pos_abs.mdV[VY]; 37.26 } 37.27 // <FS> FIRE-21915: Fix bogus avatar movement on region crossing 37.28 - if (!std::isfinite(clip_factor)) { clip_factor = 0.0; } // avoid NaN problems 37.29 - clip_factor = llclamp(clip_factor, 0.0, 1.0); // avoid overflow problem 37.30 + if (!std::isfinite(clip_factor)) 37.31 + { 37.32 + clip_factor = 0.0; // avoid NaN problems 37.33 + } 37.34 + else 37.35 + { 37.36 + clip_factor = llclamp(clip_factor, 0.0, 1.0); // avoid overflow problem 37.37 + } 37.38 } 37.39 // </FS> 37.40 37.41 @@ -868,21 +877,36 @@ 37.42 //final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0, 37.43 // (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO)); 37.44 37.45 - // True if clipped. Caller needs to know, because it will kill velocity if there's clipping 37.46 - // Don't do this by comparing floating point numbers for equality. That has roundoff problems. 37.47 - clipped = clip_factor > F_ALMOST_ZERO; // clipped in X or Y 37.48 - LLVector3d final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor); 37.49 - clipped |= final_region_pos.mdV[VX] < -F_ALMOST_ZERO || final_region_pos.mdV[VX] > (F64)(region_width - F_ALMOST_ZERO); 37.50 - clipped |= final_region_pos.mdV[VY] < -F_ALMOST_ZERO || final_region_pos.mdV[VY] > (F64)(region_width - F_ALMOST_ZERO); 37.51 - clipped |= final_region_pos.mdV[VZ] < -F_ALMOST_ZERO || final_region_pos.mdV[VZ] > (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO); // if actually clipping 37.52 - // Final sanity check - don't allow positions more than clamp_range out of region. 37.53 - F64 clamp_range = region_width / 2.0; // half a region width 37.54 - final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], -clamp_range, 37.55 - (F64)(region_width + clamp_range)); 37.56 - final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], -clamp_range, 37.57 - (F64)(region_width + clamp_range)); 37.58 - final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0, 37.59 - (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO)); 37.60 + LLVector3d final_region_pos; 37.61 + if (fsExperimentalRegionCrossingMovementFix) 37.62 + { 37.63 + // True if clipped. Caller needs to know, because it will kill velocity if there's clipping 37.64 + // Don't do this by comparing floating point numbers for equality. That has roundoff problems. 37.65 + clipped = clip_factor > F_ALMOST_ZERO; // clipped in X or Y 37.66 + final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor); 37.67 + clipped |= final_region_pos.mdV[VX] < -F_ALMOST_ZERO || final_region_pos.mdV[VX] > (F64)(region_width - F_ALMOST_ZERO); 37.68 + clipped |= final_region_pos.mdV[VY] < -F_ALMOST_ZERO || final_region_pos.mdV[VY] > (F64)(region_width - F_ALMOST_ZERO); 37.69 + clipped |= final_region_pos.mdV[VZ] < -F_ALMOST_ZERO || final_region_pos.mdV[VZ] > (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO); // if actually clipping 37.70 + // Final sanity check - don't allow positions more than clamp_range out of region. 37.71 + F64 clamp_range = region_width / 2.0; // half a region width 37.72 + final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], -clamp_range, 37.73 + (F64)(region_width + clamp_range)); 37.74 + final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], -clamp_range, 37.75 + (F64)(region_width + clamp_range)); 37.76 + final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0, 37.77 + (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO)); 37.78 + } 37.79 + else 37.80 + { 37.81 + // clamp to within region dimensions 37.82 + final_region_pos = LLVector3d(region_coord) - (delta_pos * clip_factor); 37.83 + final_region_pos.mdV[VX] = llclamp(final_region_pos.mdV[VX], 0.0, 37.84 + (F64)(region_width - F_ALMOST_ZERO)); 37.85 + final_region_pos.mdV[VY] = llclamp(final_region_pos.mdV[VY], 0.0, 37.86 + (F64)(region_width - F_ALMOST_ZERO)); 37.87 + final_region_pos.mdV[VZ] = llclamp(final_region_pos.mdV[VZ], 0.0, 37.88 + (F64)(LLWorld::getInstance()->getRegionMaxHeight() - F_ALMOST_ZERO)); 37.89 + } 37.90 // </FS> 37.91 return regionp->getPosGlobalFromRegion(LLVector3(final_region_pos)); 37.92 }
38.1 --- a/indra/newview/llxmlrpctransaction.cpp Wed Mar 21 20:23:52 2018 +0100 38.2 +++ b/indra/newview/llxmlrpctransaction.cpp Sat Apr 07 14:59:44 2018 +0200 38.3 @@ -367,7 +367,7 @@ 38.4 mCertStore = gSavedSettings.getString("CertStore"); 38.5 38.6 httpOpts->setSSLVerifyPeer( vefifySSLCert ); 38.7 - httpOpts->setSSLVerifyHost( vefifySSLCert ? 2 : 0); 38.8 + httpOpts->setSSLVerifyHost( vefifySSLCert ); 38.9 38.10 // LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer 38.11 httpHeaders = LLCore::HttpHeaders::ptr_t(new LLCore::HttpHeaders());
39.1 --- a/indra/newview/skins/default/xui/en/floater_my_appearance.xml Wed Mar 21 20:23:52 2018 +0100 39.2 +++ b/indra/newview/skins/default/xui/en/floater_my_appearance.xml Sat Apr 07 14:59:44 2018 +0200 39.3 @@ -13,7 +13,7 @@ 39.4 reuse_instance="true" 39.5 title="Appearance" 39.6 min_height="200" 39.7 - min_width="325" 39.8 + min_width="351" 39.9 width="333"> 39.10 <panel 39.11 top="18"
40.1 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml Wed Mar 21 20:23:52 2018 +0100 40.2 +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml Sat Apr 07 14:59:44 2018 +0200 40.3 @@ -33,7 +33,7 @@ 40.4 height="22" 40.5 layout="topleft" 40.6 name="navigation_bar_visibility_panel" 40.7 - visibility_control="ShowNavbarNavigationPanel" 40.8 + visibility_control="FSInternalShowNavbarNavigationPanel" 40.9 auto_resize="false" 40.10 width="1024"> 40.11 40.12 @@ -216,7 +216,7 @@ 40.13 height="15" 40.14 layout="topleft" 40.15 name="favorites_bar_visibility_panel" 40.16 - visibility_control="ShowNavbarFavoritesPanel" 40.17 + visibility_control="FSInternalShowNavbarFavoritesPanel" 40.18 auto_resize="false"> 40.19 40.20 <favorites_bar
41.1 --- a/indra/newview/skins/metaharper/xui/en/panel_navigation_bar.xml Wed Mar 21 20:23:52 2018 +0100 41.2 +++ b/indra/newview/skins/metaharper/xui/en/panel_navigation_bar.xml Sat Apr 07 14:59:44 2018 +0200 41.3 @@ -33,7 +33,7 @@ 41.4 height="22" 41.5 layout="topleft" 41.6 name="navigation_bar_visibility_panel" 41.7 - visibility_control="ShowNavbarNavigationPanel" 41.8 + visibility_control="FSInternalShowNavbarNavigationPanel" 41.9 auto_resize="false" 41.10 width="1024"> 41.11 41.12 @@ -216,7 +216,7 @@ 41.13 height="15" 41.14 layout="topleft" 41.15 name="favorites_bar_visibility_panel" 41.16 - visibility_control="ShowNavbarFavoritesPanel" 41.17 + visibility_control="FSInternalShowNavbarFavoritesPanel" 41.18 auto_resize="true"> 41.19 41.20 <favorites_bar
42.1 --- a/indra/newview/skins/starlight/xui/en/panel_navigation_bar.xml Wed Mar 21 20:23:52 2018 +0100 42.2 +++ b/indra/newview/skins/starlight/xui/en/panel_navigation_bar.xml Sat Apr 07 14:59:44 2018 +0200 42.3 @@ -36,7 +36,7 @@ 42.4 height="24" 42.5 layout="topleft" 42.6 name="navigation_bar_visibility_panel" 42.7 - visibility_control="ShowNavbarNavigationPanel" 42.8 + visibility_control="FSInternalShowNavbarNavigationPanel" 42.9 width="1024" 42.10 auto_resize="false"> 42.11 42.12 @@ -227,7 +227,7 @@ 42.13 height="15" 42.14 layout="topleft" 42.15 name="favorites_bar_visibility_panel" 42.16 - visibility_control="ShowNavbarFavoritesPanel" 42.17 + visibility_control="FSInternalShowNavbarFavoritesPanel" 42.18 auto_resize="false"> 42.19 42.20 <favorites_bar
43.1 --- a/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml Wed Mar 21 20:23:52 2018 +0100 43.2 +++ b/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml Sat Apr 07 14:59:44 2018 +0200 43.3 @@ -35,7 +35,7 @@ 43.4 height="24" 43.5 layout="topleft" 43.6 name="navigation_bar_visibility_panel" 43.7 - visibility_control="ShowNavbarNavigationPanel" 43.8 + visibility_control="FSInternalShowNavbarNavigationPanel" 43.9 width="1024" 43.10 auto_resize="false"> 43.11 43.12 @@ -225,7 +225,7 @@ 43.13 height="15" 43.14 layout="topleft" 43.15 name="favorites_bar_visibility_panel" 43.16 - visibility_control="ShowNavbarFavoritesPanel" 43.17 + visibility_control="FSInternalShowNavbarFavoritesPanel" 43.18 auto_resize="false"> 43.19 43.20 <favorites_bar
44.1 --- a/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml Wed Mar 21 20:23:52 2018 +0100 44.2 +++ b/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml Sat Apr 07 14:59:44 2018 +0200 44.3 @@ -28,13 +28,13 @@ 44.4 animate="false" 44.5 follows="top|left" 44.6 clip="false" 44.7 - height="9" 44.8 + height="27" 44.9 width="200" 44.10 left_pad="0" 44.11 layout="topleft" 44.12 orientation="horizontal" 44.13 name="ls_control_panel" 44.14 - top="18" 44.15 + top="0" 44.16 left="3"> 44.17 <layout_panel 44.18 name="lp_translate_btn"
45.1 --- a/indra/newview/viewer_manifest.py Wed Mar 21 20:23:52 2018 +0100 45.2 +++ b/indra/newview/viewer_manifest.py Sat Apr 07 14:59:44 2018 +0200 45.3 @@ -1957,12 +1957,16 @@ 45.4 with self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'), dst="lib"): 45.5 self.path( "libcef.so" ) 45.6 self.path( "libllceflib.so" ) 45.7 + 45.8 + with self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release', 'swiftshader'), dst=os.path.join("bin", "swiftshader") ): 45.9 + self.path( "*.so" ) 45.10 45.11 with self.prefix(src=os.path.join(os.pardir, 'packages', 'bin', 'release'), dst="bin"): 45.12 self.path( "chrome-sandbox" ) 45.13 - self.path( "llceflib_host" ) 45.14 + self.path( "dullahan_host" ) 45.15 self.path( "natives_blob.bin" ) 45.16 self.path( "snapshot_blob.bin" ) 45.17 + self.path( "v8_context_snapshot.bin" ) 45.18 self.path( "libffmpegsumo.so" ) 45.19 45.20 with self.prefix(src=os.path.join(os.pardir, 'packages', 'resources'), dst="bin"): 45.21 @@ -2159,7 +2163,7 @@ 45.22 [os.path.join(self.get_dst_prefix(), dir) for dir in ('bin', 'lib')] + 45.23 # <FS:Ansariel> Remove VMP 45.24 #['-type', 'f', '!', '-name', '*.py', '!', '-name', 'SL_Launcher', 45.25 - ['-type', 'f', '!', 45.26 + ['-type', 'f', "!", "-name", "*.dat", "!", "-name", "*.pak", "!", "-name", "*.bin", 45.27 # </FS:Ansariel> Remove VMP 45.28 '!', '-name', 'update_install', '-exec', 'strip', '-S', '{}', ';']) 45.29