From b8da971facd2b73472c3e8b06614cd0c8ebcd14b Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 12 Jun 2021 08:08:35 +0000 Subject: [PATCH 1/4] Server statistics: New section for relais and nomads --- src/Module/Admin/Federation.php | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/Module/Admin/Federation.php b/src/Module/Admin/Federation.php index 75f4d288f..2a7843436 100644 --- a/src/Module/Admin/Federation.php +++ b/src/Module/Admin/Federation.php @@ -51,6 +51,8 @@ class Federation extends BaseAdmin 'socialhome' => ['name' => 'SocialHome', 'color' => '#52056b'], // lilac from the Django Image used at the Socialhome homepage 'wordpress' => ['name' => 'WordPress', 'color' => '#016087'], // Background color of the homepage 'writefreely' => ['name' => 'WriteFreely', 'color' => '#292929'], // Font color of the homepage + 'mistpark' => ['name' => 'Nomad projects (Mistpark, Osada, Roadhouse, Zap)', 'color' => '#348a4a'], // Green like the Mistpark green + 'relay' => ['name' => 'ActivityPub Relay', 'color' => '#888888'], // Grey like the second color of the ActivityPub logo 'other' => ['name' => DI::l10n()->t('Other'), 'color' => '#F1007E'], // ActivityPub main color ]; @@ -80,6 +82,10 @@ class Federation extends BaseAdmin if (in_array($gserver['platform'], ['Red Matrix', 'redmatrix', 'red'])) { $version['version'] = 'Red ' . $version['version']; + } elseif (in_array($gserver['platform'], ['osada', 'mistpark', 'roadhouse', 'zap'])) { + $version['version'] = $gserver['platform'] . ' ' . $version['version']; + } elseif (in_array($gserver['platform'], ['activityrelay', 'pub-relay', 'selective-relay', 'aoderelay'])) { + $version['version'] = $gserver['platform'] . '-' . $version['version']; } $versionCounts[] = $version; @@ -92,12 +98,16 @@ class Federation extends BaseAdmin $platform = 'friendica'; } elseif (in_array($platform, ['red matrix', 'redmatrix', 'red'])) { $platform = 'hubzilla'; + } elseif (in_array($platform, ['mistpark', 'osada', 'roadhouse', 'zap'])) { + $platform = 'mistpark'; } elseif(stristr($platform, 'pleroma')) { $platform = 'pleroma'; } elseif(stristr($platform, 'statusnet')) { $platform = 'gnusocial'; } elseif(stristr($platform, 'wordpress')) { $platform = 'wordpress'; + } elseif (in_array($platform, ['activityrelay', 'pub-relay', 'selective-relay', 'aoderelay'])) { + $platform = 'relay'; } elseif (!in_array($platform, $platforms)) { $platform = 'other'; } @@ -122,6 +132,10 @@ class Federation extends BaseAdmin $versionCounts = self::reformaPleromaVersions($versionCounts); } elseif ($platform == 'diaspora') { $versionCounts = self::reformaDiasporaVersions($versionCounts); + } elseif ($platform == 'relay') { + $versionCounts = self::reformaRelayVersions($versionCounts); + } elseif (in_array($platform, ['funkwhale', 'mastodon', 'mobilizon', 'misskey'])) { + $versionCounts = self::removeVersionSuffixes($versionCounts); } $versionCounts = self::sortVersion($versionCounts); @@ -250,6 +264,68 @@ class Federation extends BaseAdmin return $versionCounts; } + /** + * Clean up version numbers + * + * @param array $versionCounts list of version numbers + * @return array with cleaned version numbers + */ + private static function removeVersionSuffixes(array $versionCounts) + { + $compacted = []; + foreach ($versionCounts as $key => $value) { + $version = $versionCounts[$key]['version']; + + foreach ([' ', '+', '-', '#', '_', '~'] as $delimiter) { + $parts = explode($delimiter, trim($version)); + $version = array_shift($parts); + } + + if (empty($compacted[$version])) { + $compacted[$version] = $versionCounts[$key]['total']; + } else { + $compacted[$version] += $versionCounts[$key]['total']; + } + } + + $versionCounts = []; + foreach ($compacted as $version => $pl_total) { + $versionCounts[] = ['version' => $version, 'total' => $pl_total]; + } + + return $versionCounts; + } + + /** + * Clean up relay version numbers + * + * @param array $versionCounts list of version numbers + * @return array with cleaned version numbers + */ + private static function reformaRelayVersions(array $versionCounts) + { + $compacted = []; + foreach ($versionCounts as $key => $value) { + $version = $versionCounts[$key]['version']; + + $parts = explode(' ', trim($version)); + $version = array_shift($parts); + + if (empty($compacted[$version])) { + $compacted[$version] = $versionCounts[$key]['total']; + } else { + $compacted[$version] += $versionCounts[$key]['total']; + } + } + + $versionCounts = []; + foreach ($compacted as $version => $pl_total) { + $versionCounts[] = ['version' => $version, 'total' => $pl_total]; + } + + return $versionCounts; + } + /** * Reformat, sort and compact version numbers * From c21cbd936ea384d49f7ea75bd26a73a928e0d034 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 12 Jun 2021 10:12:02 +0000 Subject: [PATCH 2/4] Changed sorting --- src/Module/Admin/Federation.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Module/Admin/Federation.php b/src/Module/Admin/Federation.php index 2a7843436..d2605915c 100644 --- a/src/Module/Admin/Federation.php +++ b/src/Module/Admin/Federation.php @@ -138,7 +138,11 @@ class Federation extends BaseAdmin $versionCounts = self::removeVersionSuffixes($versionCounts); } - $versionCounts = self::sortVersion($versionCounts); + if (!in_array($platform, ['other', 'relay', 'mistpark'])) { + $versionCounts = self::sortVersion($versionCounts); + } else { + ksort($versionCounts); + } $gserver['platform'] = $systems[$platform]['name']; From b7f12051a83f616d0ccc43bd87b87a4f27794cf0 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 12 Jun 2021 11:19:23 +0000 Subject: [PATCH 3/4] Small fixes --- src/Module/Admin/Federation.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Module/Admin/Federation.php b/src/Module/Admin/Federation.php index d2605915c..4be231975 100644 --- a/src/Module/Admin/Federation.php +++ b/src/Module/Admin/Federation.php @@ -85,7 +85,7 @@ class Federation extends BaseAdmin } elseif (in_array($gserver['platform'], ['osada', 'mistpark', 'roadhouse', 'zap'])) { $version['version'] = $gserver['platform'] . ' ' . $version['version']; } elseif (in_array($gserver['platform'], ['activityrelay', 'pub-relay', 'selective-relay', 'aoderelay'])) { - $version['version'] = $gserver['platform'] . '-' . $version['version']; + $version['version'] = $gserver['platform'] . '-' . $version['version']; } $versionCounts[] = $version; @@ -133,7 +133,7 @@ class Federation extends BaseAdmin } elseif ($platform == 'diaspora') { $versionCounts = self::reformaDiasporaVersions($versionCounts); } elseif ($platform == 'relay') { - $versionCounts = self::reformaRelayVersions($versionCounts); + $versionCounts = self::reformatRelayVersions($versionCounts); } elseif (in_array($platform, ['funkwhale', 'mastodon', 'mobilizon', 'misskey'])) { $versionCounts = self::removeVersionSuffixes($versionCounts); } @@ -306,7 +306,7 @@ class Federation extends BaseAdmin * @param array $versionCounts list of version numbers * @return array with cleaned version numbers */ - private static function reformaRelayVersions(array $versionCounts) + private static function reformatRelayVersions(array $versionCounts) { $compacted = []; foreach ($versionCounts as $key => $value) { From dfef187b22a7a615f19dcec77c96ad9f253c38de Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 12 Jun 2021 11:20:00 +0000 Subject: [PATCH 4/4] "Tooot" is tested --- doc/API-Mastodon.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/API-Mastodon.md b/doc/API-Mastodon.md index 975fc786c..db70d9fce 100644 --- a/doc/API-Mastodon.md +++ b/doc/API-Mastodon.md @@ -21,6 +21,7 @@ Authentication is the same as described in [Using the APIs](help/api#Authenticat - [Husky](https://husky.fwgs.ru) - [Roma](https://play.google.com/store/apps/details?id=tech.bigfig.roma) - [Subway Tooter](https://github.com/tateisu/SubwayTooter) +- [Tooot](https://tooot.app/) - [Tusky](https://tusky.app) - [Twidere](https://github.com/TwidereProject/) - [twitlatte](https://github.com/moko256/twitlatte) @@ -33,6 +34,7 @@ Authentication is the same as described in [Using the APIs](help/api#Authenticat - [Roma](https://apps.apple.com/de/app/roma-for-pleroma-and-mastodon/id1445328699) - [StarPterano](https://apps.apple.com/de/app/starpterano/id1436972796) Uses an OAuth method where you have to manually copy and paste the provided code. - [Stella](https://apps.apple.com/us/app/stella-for-mastodon-twitter/id921372048?l=ms) +- [Tooot](https://tooot.app/) - [Tootle](https://apps.apple.com/de/app/tootle-for-mastodon/id1236013466) entered hostname must match in upper/lower case. Currently crashes on "Status" type notifications. #### Desktop