From 72949e0834f71da0fab24288c4481f9048243bd2 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 2 Jan 2022 06:46:07 +0200 Subject: [PATCH] implement DHT data cache --- database/cloud-server.mwb | Bin 10019 -> 9892 bytes src/application/controller/api/image.php | 21 ----------- .../controller/api/user/avatar.php | 34 +++++++++++++++--- .../controller/api/user/profile.php | 34 ++++++++++++------ src/application/view/common/module/post.phtml | 2 +- src/config-default.php | 3 ++ .../css/template/default/module/feed.css | 1 + .../css/template/default/module/following.css | 1 + .../css/template/default/module/post.css | 1 + src/public/js/module/feed.js | 4 +-- src/public/js/module/following.js | 12 +++---- src/public/js/module/post.js | 4 +-- src/public/js/module/users.js | 2 +- 13 files changed, 70 insertions(+), 49 deletions(-) delete mode 100755 src/application/controller/api/image.php diff --git a/database/cloud-server.mwb b/database/cloud-server.mwb index 0a1d08bf34cec09eb72ae82b898de7559472381c..3a536bbf139c326e2a5b6157035b36a86dd2dee7 100644 GIT binary patch delta 8865 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 zNwkBKjngenerateImageResource($fileName, 42, 42, false); - - file_put_contents($filePath, $image); - } - - $image = file_get_contents($filePath); - - header("Content-Type: image/jpeg"); - - echo $image; -} diff --git a/src/application/controller/api/user/avatar.php b/src/application/controller/api/user/avatar.php index ac2aaf0..259b2d0 100644 --- a/src/application/controller/api/user/avatar.php +++ b/src/application/controller/api/user/avatar.php @@ -10,7 +10,15 @@ if (isset($_SESSION['userName'])) { $userName = isset($_GET['userName']) ? Filter::userName($_GET['userName']) : $_SESSION['userName']; - if ($avatarVersions = $_twister->getDHT($userName, 'avatar', 's')) { + if ($avatar = $_memcache->get('api.user.avatar.' . $userName)) { + + $response = [ + 'success' => true, + 'message' => _('Avatar successfully received from Cache'), + 'avatar' => $avatar + ]; + + } else if ($avatarVersions = $_twister->getDHT($userName, 'avatar', 's')) { // Check avatar exists if ($userId = $_modelUser->getUserId($userName)) { @@ -36,10 +44,12 @@ if (isset($_SESSION['userName'])) { $response = [ 'success' => true, - 'message' => _('Avatar successfully received'), + 'message' => _('Avatar successfully received from DHT'), 'avatar' => $avatarInfo['data'] ]; + $_memcache->set('api.user.avatar.' . $userName, $avatarInfo['data'], MEMCACHE_COMPRESS, MEMCACHE_DHT_AVATAR_TIMEOUT); + } else { $response = [ @@ -49,12 +59,26 @@ if (isset($_SESSION['userName'])) { ]; } + // Generate identity icon } else { + $fileName = md5($userName); + $filePath = PROJECT_DIR . '/cache/image/' . $fileName . '.jpeg'; + + if (!file_exists($filePath)) { + + $icon = new Icon(); + $image = $icon->generateImageResource($fileName, 42, 42, false); + + file_put_contents($filePath, $image); + } + + $image = file_get_contents($filePath); + $response = [ - 'success' => false, - 'message' => _('Could not receive avatar details'), - 'avatar' => false + 'success' => true, + 'message' => _('Avatar successfully received from Identity'), + 'avatar' => 'data:image/jpeg;base64,' . base64_encode($image) ]; } diff --git a/src/application/controller/api/user/profile.php b/src/application/controller/api/user/profile.php index 2cbccc1..13c1a6e 100644 --- a/src/application/controller/api/user/profile.php +++ b/src/application/controller/api/user/profile.php @@ -10,7 +10,15 @@ if (isset($_SESSION['userName'])) { $userName = isset($_GET['userName']) ? Filter::userName($_GET['userName']) : $_SESSION['userName']; - if ($userProfileVersions = $_twister->getDHT($userName, 'profile', 's')) { + if ($profile = $_memcache->get('api.user.profile.' . $userName)) { + + $response = [ + 'success' => true, + 'message' => _('Profile successfully received from Cache'), + 'profile' => $profile + ]; + + } else if ($userProfileVersions = $_twister->getDHT($userName, 'profile', 's')) { // Check user exists if ($userId = $_modelUser->getUserId($userName)) { @@ -43,20 +51,24 @@ if (isset($_SESSION['userName'])) { // Get latest version available if ($profileInfo = $_modelProfile->get($userId)) { + $profile = [ + 'userName' => $userName, + 'fullName' => $profileInfo['fullName'], + 'location' => $profileInfo['location'], + 'url' => $profileInfo['url'], + 'bitMessage' => $profileInfo['bitMessage'], + 'tox' => $profileInfo['tox'], + 'bio' => nl2br($profileInfo['bio']), + ]; + $response = [ 'success' => true, - 'message' => _('Profile successfully received'), - 'profile' => [ - 'userName' => $userName, - 'fullName' => $profileInfo['fullName'], - 'location' => $profileInfo['location'], - 'url' => $profileInfo['url'], - 'bitMessage' => $profileInfo['bitMessage'], - 'tox' => $profileInfo['tox'], - 'bio' => nl2br($profileInfo['bio']), - ] + 'message' => _('Profile successfully received from DHT'), + 'profile' => $profile ]; + $_memcache->set('api.user.profile.' . $userName, $profile, MEMCACHE_COMPRESS, MEMCACHE_DHT_PROFILE_TIMEOUT); + } else { $response = [ diff --git a/src/application/view/common/module/post.phtml b/src/application/view/common/module/post.phtml index 62a9a07..963ab9b 100644 --- a/src/application/view/common/module/post.phtml +++ b/src/application/view/common/module/post.phtml @@ -1,7 +1,7 @@
- +
diff --git a/src/config-default.php b/src/config-default.php index e8dd4cc..d46bc63 100644 --- a/src/config-default.php +++ b/src/config-default.php @@ -25,6 +25,9 @@ define('TWISTER_PASSWORD', ''); // MEMCACHE define('MEMCACHE_HOST', 'localhost'); define('MEMCACHE_PORT', 11211); +define('MEMCACHE_COMPRESS', false); +define('MEMCACHE_DHT_AVATAR_TIMEOUT', 3600); +define('MEMCACHE_DHT_PROFILE_TIMEOUT', 3600); // COMMON define('APPLICATION_ALLOW_REGISTRATION', true); diff --git a/src/public/css/template/default/module/feed.css b/src/public/css/template/default/module/feed.css index e353fe2..71b599b 100644 --- a/src/public/css/template/default/module/feed.css +++ b/src/public/css/template/default/module/feed.css @@ -25,6 +25,7 @@ border: 2px #fff solid; width: 46px; height: 46px; + display: none } .moduleFeed .item .message { diff --git a/src/public/css/template/default/module/following.css b/src/public/css/template/default/module/following.css index 5c3e8f4..e2d56bb 100644 --- a/src/public/css/template/default/module/following.css +++ b/src/public/css/template/default/module/following.css @@ -32,6 +32,7 @@ border: 2px #fff solid; width: 16px; height: 16px; + display: none } .moduleFollowing .item .action { diff --git a/src/public/css/template/default/module/post.css b/src/public/css/template/default/module/post.css index 272a1e6..8c7110d 100644 --- a/src/public/css/template/default/module/post.css +++ b/src/public/css/template/default/module/post.css @@ -17,6 +17,7 @@ border: 2px #fff solid; width: 46px; height: 46px; + display: none } .modulePost .message { diff --git a/src/public/js/module/feed.js b/src/public/js/module/feed.js index 3a276df..6a80ad7 100644 --- a/src/public/js/module/feed.js +++ b/src/public/js/module/feed.js @@ -38,7 +38,7 @@ var ModuleFeed = { 'href': 'people/' + userName }).append( $('', { - 'src': '/api/image?hash=' + userName, + 'src': '', 'alt': '', }) ) @@ -83,7 +83,7 @@ var ModuleFeed = { if (response.success) { if (response.avatar) { - $(feed).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar); + $(feed).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar).show(); } } else { diff --git a/src/public/js/module/following.js b/src/public/js/module/following.js index a74624a..4592af7 100644 --- a/src/public/js/module/following.js +++ b/src/public/js/module/following.js @@ -15,7 +15,7 @@ var ModuleFollowing = { 'href': 'people/' + userName }).append( $('', { - 'src': '/api/image?hash=' + userName, + 'src': '', 'alt': '', }) ) @@ -94,7 +94,7 @@ var ModuleFollowing = { } }, error: function(jqXHR, textStatus, errorThrown) { - console.log(textStatus, errorThrown); + console.log(textStatus, errorThrown); } }); }, @@ -110,7 +110,7 @@ var ModuleFollowing = { if (response.success) { if (response.avatar) { - $(list).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar); + $(list).find('div[data-username="' + userName + '"] .avatar img').attr('src', response.avatar).show(); } } else { @@ -120,7 +120,7 @@ var ModuleFollowing = { } }, error: function(jqXHR, textStatus, errorThrown) { - console.log(textStatus, errorThrown); + console.log(textStatus, errorThrown); } }); }, @@ -149,7 +149,7 @@ var ModuleFollowing = { } }, error: function(jqXHR, textStatus, errorThrown) { - console.log(textStatus, errorThrown); + console.log(textStatus, errorThrown); } }); }, @@ -176,7 +176,7 @@ var ModuleFollowing = { } }, error: function(jqXHR, textStatus, errorThrown) { - console.log(textStatus, errorThrown); + console.log(textStatus, errorThrown); } }); }, diff --git a/src/public/js/module/post.js b/src/public/js/module/post.js index b30bc02..bb52b2f 100644 --- a/src/public/js/module/post.js +++ b/src/public/js/module/post.js @@ -11,7 +11,7 @@ var ModulePost = { if (response.success) { if (response.avatar) { - $(element).find('img').attr('src', response.avatar); + $(element).find('img').attr('src', response.avatar).show(); } } else { @@ -27,7 +27,7 @@ var ModulePost = { }, add: function() { - var input = $('#modulePost > .message > textarea'); + var input = $('#modulePost > .message > textarea'); $.ajax({ url: 'api/post/add', diff --git a/src/public/js/module/users.js b/src/public/js/module/users.js index 6f23f81..e453f72 100644 --- a/src/public/js/module/users.js +++ b/src/public/js/module/users.js @@ -14,7 +14,7 @@ var ModuleUsers = { 'href': 'people/' + userName }).append( $('', { - 'src': '/api/image?hash=' + userName, + 'src': '', 'alt': '', }) )