User background image optimization

This commit is contained in:
RainLoop Team 2015-02-05 09:14:13 +04:00
parent 98e110fcc7
commit 47cc73c992
8 changed files with 114 additions and 106 deletions

View file

@ -126,10 +126,10 @@
{ {
_.delay(function () { _.delay(function () {
$('#rl-bg').attr('style', 'background-image: none !important;') $('#rl-bg').attr('style', 'background-image: none !important;')
.backstretch(Links.publicLink(Settings.settingsGet('UserBackgroundHash')), { .backstretch(Links.userBackground(Settings.settingsGet('UserBackgroundHash')), {
'fade': Globals.bAnimationSupported ? 1000 : 0 'fade': Globals.bAnimationSupported ? 1000 : 0, 'centeredX': true, 'centeredY': true
}).removeAttr('style'); }).removeAttr('style');
}, 2000); }, 1000);
} }
this.socialUsers = _.bind(this.socialUsers, this); this.socialUsers = _.bind(this.socialUsers, this);

View file

@ -171,6 +171,16 @@
return this.sServer + '/Raw/0/Public/' + sHash + '/'; return this.sServer + '/Raw/0/Public/' + sHash + '/';
}; };
/**
* @param {string} sHash
* @return {string}
*/
Links.prototype.userBackground = function (sHash)
{
return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/UserBackground/' +
this.sSubSubQuery + sHash;
};
/** /**
* @param {string} sInboxFolderName = 'INBOX' * @param {string} sInboxFolderName = 'INBOX'
* @return {string} * @return {string}

View file

@ -1614,7 +1614,7 @@
Utils.__themeTimer = 0; Utils.__themeTimer = 0;
Utils.__themeAjax = null; Utils.__themeAjax = null;
Utils.changeTheme = function (sValue, sHash, themeTrigger, Links) Utils.changeTheme = function (sValue, themeTrigger)
{ {
var var
oThemeLink = $('#rlThemeLink'), oThemeLink = $('#rlThemeLink'),
@ -1673,26 +1673,6 @@
} }
} }
if (Links)
{
var $oBg = $('#rl-bg');
if (!sHash)
{
if ($oBg.data('backstretch'))
{
$oBg.backstretch('destroy').attr('style', '');
}
}
else
{
$oBg.backstretch(Links.publicLink(sHash), {
'fade': Globals.bAnimationSupported ? 1000 : 0,
'centeredX': true,
'centeredY': true
});
}
}
themeTrigger(Enums.SaveSettingsStep.TrueResult); themeTrigger(Enums.SaveSettingsStep.TrueResult);
} }

View file

@ -93,7 +93,7 @@
self.theme.subscribe(function (sValue) { self.theme.subscribe(function (sValue) {
Utils.changeTheme(sValue, '', self.themeTrigger); Utils.changeTheme(sValue, self.themeTrigger);
Remote.saveAdminConfig(f3, { Remote.saveAdminConfig(f3, {
'Theme': Utils.trim(sValue) 'Theme': Utils.trim(sValue)

View file

@ -5,6 +5,7 @@
var var
_ = require('_'), _ = require('_'),
$ = require('$'),
ko = require('ko'), ko = require('ko'),
Jua = require('Jua'), Jua = require('Jua'),
@ -49,7 +50,7 @@
oTheme.selected(sValue === oTheme.name); oTheme.selected(sValue === oTheme.name);
}); });
Utils.changeTheme(sValue, this.background.hash(), this.themeTrigger, Links); Utils.changeTheme(sValue, this.themeTrigger);
Remote.saveSettings(null, { Remote.saveSettings(null, {
'Theme': sValue 'Theme': sValue
@ -58,7 +59,23 @@
}, this); }, this);
this.background.hash.subscribe(function (sValue) { this.background.hash.subscribe(function (sValue) {
Utils.changeTheme(this.theme(), sValue, this.themeTrigger, Links);
var $oBg = $('#rl-bg');
if (!sValue)
{
if ($oBg.data('backstretch'))
{
$oBg.backstretch('destroy').attr('style', '');
}
}
else
{
$('#rl-bg').attr('style', 'background-image: none !important;').backstretch(
Links.userBackground(sValue), {
'fade': 1000, 'centeredX': true, 'centeredY': true
}).removeAttr('style');
}
}, this); }, this);
} }

View file

@ -104,7 +104,7 @@ html.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper {
&.csstransitions .modal.fade { &.csstransitions .modal.fade {
.transition(all 200ms ease-out); .transition(all 200ms ease-out);
transform: scale(.9); transform: scale(1.1);
&.in { &.in {
transform: none; transform: none;

View file

@ -1567,11 +1567,11 @@ class Actions
{ {
$aResult['UserBackgroundName'] = (string) $oSettings->GetConf('UserBackgroundName', $aResult['UserBackgroundName']); $aResult['UserBackgroundName'] = (string) $oSettings->GetConf('UserBackgroundName', $aResult['UserBackgroundName']);
$aResult['UserBackgroundHash'] = (string) $oSettings->GetConf('UserBackgroundHash', $aResult['UserBackgroundHash']); $aResult['UserBackgroundHash'] = (string) $oSettings->GetConf('UserBackgroundHash', $aResult['UserBackgroundHash']);
// if (!empty($aResult['UserBackgroundName']) && !empty($aResult['UserBackgroundHash']))
if (!empty($aResult['UserBackgroundHash'])) // TODO // {
{ // $aResult['IncludeBackground'] = './?/Raw/&s=/{{USER}}/UserBackground/&ss=/'.
$aResult['IncludeBackground'] = './?/Raw/0/Public/'.$aResult['UserBackgroundHash'].'/'; // $aResult['UserBackgroundHash'].'/';
} // }
} }
$aResult['DefaultIdentityID'] = $oSettingsLocal->GetConf('DefaultIdentityID', $oAccount ? $oAccount->Email() : $aResult['DefaultIdentityID']); $aResult['DefaultIdentityID'] = $oSettingsLocal->GetConf('DefaultIdentityID', $oAccount ? $oAccount->Email() : $aResult['DefaultIdentityID']);
@ -1593,10 +1593,10 @@ class Actions
$aResult['AllowTwitterSocial'] = false; $aResult['AllowTwitterSocial'] = false;
} }
$sStaticCache = \md5(APP_VERSION.$this->Plugins()->Hash().$aResult['UserBackgroundHash']); $sStaticCache = \md5(APP_VERSION.$this->Plugins()->Hash());
$sTheme = $this->ValidateTheme($sTheme); $sTheme = $this->ValidateTheme($sTheme);
$sNewThemeLink = './?/Css/0/'.($bAdmin ? 'Admin' : 'User').'/-/'.$sTheme.'/-/'.$sStaticCache.'/Hash/'; $sNewThemeLink = './?/Css/0/'.($bAdmin ? 'Admin' : 'User').'/-/'.$sTheme.'/-/'.$sStaticCache.'/Hash/-/';
$bUserLanguage = false; $bUserLanguage = false;
if (!$bAdmin && !$aResult['Auth'] && !empty($_COOKIE['rllang']) && if (!$bAdmin && !$aResult['Auth'] && !empty($_COOKIE['rllang']) &&
@ -5702,8 +5702,6 @@ class Actions
if (0 < \strlen($sSentFolder)) if (0 < \strlen($sSentFolder))
{ {
try try
{
if (!$oMessage->GetBcc())
{ {
if (\is_resource($rMessageStream)) if (\is_resource($rMessageStream))
{ {
@ -5713,25 +5711,8 @@ class Actions
$this->MailClient()->MessageAppendStream( $this->MailClient()->MessageAppendStream(
$rMessageStream, $iMessageStreamSize, $sSentFolder, array( $rMessageStream, $iMessageStreamSize, $sSentFolder, array(
\MailSo\Imap\Enumerations\MessageFlag::SEEN \MailSo\Imap\Enumerations\MessageFlag::SEEN
)); )
} );
else
{
$rAppendMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource();
$iAppendMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter(
$oMessage->ToStream(false), array($rAppendMessageStream), 8192, true, true, true);
$this->MailClient()->MessageAppendStream(
$rAppendMessageStream, $iAppendMessageStreamSize, $sSentFolder, array(
\MailSo\Imap\Enumerations\MessageFlag::SEEN
));
if (\is_resource($rAppendMessageStream))
{
@fclose($rAppendMessageStream);
}
}
} }
catch (\Exception $oException) catch (\Exception $oException)
{ {
@ -5900,8 +5881,7 @@ class Actions
{ {
$mResult = null; $mResult = null;
$sData = $this->StorageProvider()->Get( $sData = $this->StorageProvider()->Get($oAccount,
$oAccount,
\RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG,
'contacts_sync' 'contacts_sync'
); );
@ -5943,8 +5923,7 @@ class Actions
$mData = $this->getContactsSyncData($oAccount); $mData = $this->getContactsSyncData($oAccount);
$bResult = $this->StorageProvider()->Put( $bResult = $this->StorageProvider()->Put($oAccount,
$oAccount,
\RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG,
'contacts_sync', 'contacts_sync',
\RainLoop\Utils::EncodeKeyValues(array( \RainLoop\Utils::EncodeKeyValues(array(
@ -6988,14 +6967,10 @@ class Actions
$oSettings = $this->SettingsProvider()->Load($oAccount); $oSettings = $this->SettingsProvider()->Load($oAccount);
if ($oAccount && $oSettings) if ($oAccount && $oSettings)
{ {
$sHash = $oSettings->GetConf('UserBackgroundHash', ''); $this->StorageProvider()->Clear($oAccount,
if (!empty($sHash)) \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG,
{ 'background'
$this->StorageProvider()->Clear(null,
\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY,
\RainLoop\KeyPathHelper::PublicFile($sHash)
); );
}
$oSettings->SetConf('UserBackgroundName', ''); $oSettings->SetConf('UserBackgroundName', '');
$oSettings->SetConf('UserBackgroundHash', ''); $oSettings->SetConf('UserBackgroundHash', '');
@ -7041,46 +7016,33 @@ class Actions
$sData = @\stream_get_contents($rData); $sData = @\stream_get_contents($rData);
if (!empty($sData) && 0 < \strlen($sData)) if (!empty($sData) && 0 < \strlen($sData))
{ {
$iLimit = 3; $sName = $aFile['name'];
while (true) if (empty($sName))
{ {
$iLimit--; $sName = '_';
if (0 > $iLimit)
{
$sHash = '';
break;
} }
$sHash = \sha1($sSavedName.\microtime(true).\rand(10000, 99999)); if ($this->StorageProvider()->Put($oAccount,
if (!$this->StorageProvider()->Get(null, \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG,
\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, 'background',
\RainLoop\KeyPathHelper::PublicFile($sHash), null)) \json_encode(array(
{ 'Name' => $aFile['name'],
break; 'ContentType' => $sMimeType,
} 'Raw' => \base64_encode($sData)
} ))
if (!empty($sHash))
{
if ($this->StorageProvider()->Put(null,
\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY,
\RainLoop\KeyPathHelper::PublicFile($sHash),
'data:'.$sMimeType.':'.$sData
)) ))
{ {
$sName = $aFile['name'];
$oSettings = $this->SettingsProvider()->Load($oAccount); $oSettings = $this->SettingsProvider()->Load($oAccount);
if ($oSettings) if ($oSettings)
{ {
$sHash = \md5($sName.APP_VERSION.APP_SALT.\rand(1000, 9999).\microtime(true));
$oSettings->SetConf('UserBackgroundName', $sName); $oSettings->SetConf('UserBackgroundName', $sName);
$oSettings->SetConf('UserBackgroundHash', $sHash); $oSettings->SetConf('UserBackgroundHash', $sHash);
$this->SettingsProvider()->Save($oAccount, $oSettings); $this->SettingsProvider()->Save($oAccount, $oSettings);
} }
} }
} }
}
unset($sData); unset($sData);
} }
@ -7622,6 +7584,42 @@ class Actions
return $this->rawSmart(false, true); return $this->rawSmart(false, true);
} }
/**
* @return bool
*/
public function RawUserBackground()
{
$sRawKey = (string) $this->GetActionParam('RawKey', '');
$this->verifyCacheByKey($sRawKey);
$oAccount = $this->getAccountFromToken();
$sData = $this->StorageProvider()->Get($oAccount,
\RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG,
'background'
);
if (!empty($sData))
{
$aData = \json_decode($sData, true);
unset($sData);
if (!empty($aData['ContentType']) && !empty($aData['Raw']) &&
\in_array($aData['ContentType'], array('image/png', 'image/jpg', 'image/jpeg')))
{
$this->cacheByKey($sRawKey);
@\header('Content-Type: '.$aData['ContentType']);
echo \base64_decode($aData['Raw']);
unset($aData);
return true;
}
}
return false;
}
/** /**
* @return bool * @return bool
*/ */

View file

@ -12,6 +12,7 @@
<meta http-equiv="refresh" content="0; URL=./?/BadBrowser" /> <meta http-equiv="refresh" content="0; URL=./?/BadBrowser" />
<![endif]--> <![endif]-->
<script data-cfasync="false"> <script data-cfasync="false">
window.__rlt__ = (new Date).getTime();
if (!window.navigator || !window.navigator.cookieEnabled) { if (!window.navigator || !window.navigator.cookieEnabled) {
window.document.location.replace('./?/NoCookie'); window.document.location.replace('./?/NoCookie');
} }
@ -100,8 +101,10 @@
.wait(function () { .wait(function () {
__simplePace(20); __simplePace(20);
if (window.rainloopAppData['IncludeBackground']) { if (window.rainloopAppData['IncludeBackground']) {
$('#rl-bg').attr('style', 'background-image: none !important;').backstretch(window.rainloopAppData['IncludeBackground'], { $('#rl-bg').attr('style', 'background-image: none !important;').backstretch(
'fade': 1000 window.rainloopAppData['IncludeBackground'].replace('{{USER}}',
(window.__rlah ? window.__rlah() || '0' : '0')), {
'fade': 100, 'centeredX': true, 'centeredY': true
}).removeAttr('style'); }).removeAttr('style');
} }
}) })