This commit is contained in:
Jeremy Kauffman 2018-12-03 17:31:33 -05:00 committed by Jeremy Kauffman
parent d88aca3b7e
commit 57a909d0f4
4 changed files with 79 additions and 93 deletions

View file

@ -126,9 +126,8 @@ class Controller
}
}
$router->any('/get/lbry.pre.{ext:c}', 'DownloadActions::executeGetAppPrereleaseRedirect');
$router->any('/get/lbry.{ext:c}', 'DownloadActions::executeGetAppRedirect');
$router->any('/get/lbrynet.{os:c}.zip', 'DownloadActions::executeGetDaemonRedirect');
$router->get('/releases/{repo:c}.{ext:c}', 'DownloadActions::executeDownloadReleaseAsset');
$router->get('/releases/pre/{repo:c}.{ext:c}', 'DownloadActions::executeDownloadPrereleaseAsset');
$router->get([ContentActions::URL_NEWS . '/{slug:c}?', 'news'], 'ContentActions::executeNews');
$router->get([ContentActions::URL_FAQ . '/{slug:c}?', 'faq'], 'ContentActions::executeFaq');

View file

@ -5,26 +5,14 @@ class DownloadActions extends Actions
//bad, fix me!
const ANDROID_STORE_URL = 'https://play.google.com/store/apps/details?id=io.lbry.browser';
public static function executeGetAppRedirect(string $ext)
public static function executeDownloadPrereleaseAsset(string $repo, string $ext)
{
return Controller::redirect(GitHub::getAppDownloadUrl(OS::getOsForExtension($ext)) ?: '/get', 302);
return static::executeDownloadReleaseAsset($repo, $ext, true);
}
public static function executeGetAppPrereleaseRedirect(string $ext)
public static function executeDownloadReleaseAsset(string $repo, string $ext, bool $allowPrerelease = false)
{
return Controller::redirect(GitHub::getAppPrereleaseDownloadUrl(OS::getOsForExtension($ext)) ?: '/get', 302);
}
public static function executeGetDaemonRedirect(string $os)
{
$uri = null;
$oses = Os::getAll();
if (isset($oses[$os])) {
$uri = GitHub::getDaemonDownloadUrl($os);
}
return Controller::redirect($uri, 302);
return Controller::redirect(GitHub::getRepoReleaseUrl($repo, OS::getOsForExtension($ext), $allowPrerelease) ?: '/get', 302);
}
/*
@ -48,7 +36,7 @@ class DownloadActions extends Actions
}
else
{
$asset = Github::getAppAsset($os);
$asset = Github::getRepoAsset(GitHub::REPO_LBRY_DESKTOP, $os);
$params['downloadUrl'] = $asset ? $asset['browser_download_url'] : null;
}
@ -130,7 +118,7 @@ class DownloadActions extends Actions
list($uri, $osTitle, $osIcon, $buttonLabel, $analyticsLabel) = $osChoices[$os];
if ($os !== OS::OS_ANDROID) {
$asset = Github::getAppAsset($os);
$asset = Github::getRepoAsset(GitHub::REPO_LBRY_DESKTOP, $os);
} else {
$asset = ['browser_download_url' => static::ANDROID_STORE_URL];
}
@ -158,8 +146,8 @@ class DownloadActions extends Actions
list($uri, $osTitle, $osIcon, $buttonLabel, $analyticsLabel) = $osChoices[$os];
if ($os !== OS::OS_ANDROID) {
$release = Github::getAppRelease();
$asset = Github::getAppAsset($os);
$release = Github::getRepoRelease(GitHub::REPO_LBRY_DESKTOP, false);
$asset = Github::getRepoAsset(GitHub::REPO_LBRY_DESKTOP, $os);
} else {
$asset = ['browser_download_url' => static::ANDROID_STORE_URL, 'size' => 0];
$release = [];

View file

@ -1,6 +1,4 @@
--
/FLO: /news
/There: /news
/art: /what
/credit-reports/2016-Q2: /credit-reports/2016-q2
/developer-program: /news
@ -8,15 +6,35 @@
/faq/Q1-17-CreditReport: /credit-reports/2017-Q1
/faq/Q4-credit-report: /credit-reports/2016-Q4
/faq/api-help: /faq/how-to-cli
/faq/claimtrie-implementation: https://lbry.tech/resources/lbry-claimtrie
/faq/contributing: https://lbry.tech/contribute
/faq/how-to-encrypt-wallet: https://lbry.tech/resources/encrypt-lbrycrd
/faq/how-to-report-bugs: /faq/support
/faq/make-money: /faq/earn-income
/faq/no-auction-options: /faq/naming
/faq/proof-algorithm: https://lbry.tech/resources/pow
/faq/quarterly-report-3q-2016: /credit-reports/2016-Q3
/faq/quarterly-report-july-2016: /credit-reports/2016-Q2
/faq/regtest-setup-guide: https://lbry.tech/resources/regtest-setup
/faq/tips: /faq/appreciation
/faq/when-referral-payouts: /faq/referrals
/faq/why-care-about-lbry: /get
/feedback: /learn
/FLO: /news
/get/lbry.exe : /releases/lbry-desktop.exe
/get/lbry.msi : /releases/lbry-desktop.exe
/get/lbry.dmg : /releases/lbry-desktop.dmg
/get/lbry.pkg : /releases/lbry-desktop.dmg
/get/lbry.deb : /releases/lbry-desktop.deb
/get/lbry.pre.exe : /releases/pre/lbry-desktop.exe
/get/lbry.pre.msi : /releases/pre/lbry-desktop.exe
/get/lbry.pre.dmg : /releases/pre/lbry-desktop.dmg
/get/lbry.pre.pkg : /releases/pre/lbry-desktop.dmg
/get/lbry.pre.deb : /releases/pre/lbry-desktop.deb
/get/lbrynet.linux.zip: /releases/lbry.deb
/get/lbrynet.windows.zip: /releases/lbry.exe
/get/lbrynet.macos.zip: /releases/lbry.pkg
/get/lbrynet.osx.zip: /releases/lbry.pkg
/get.How+to+Create+an+Identity+LBRY+TutorialsFollow: /faq/identity-requirements
/getFree: /news/free-lbry-credits-come-and-get-em
/join-list: /list/subscribe
@ -25,9 +43,10 @@
/lbry-osx-latest.dmg: /get
/list: /list/subscribe
/navframe?selectedItem=/news: /news
/navframe?selectedItem=/news?selectedItem=/news: /news
/news/$1.2b-market-cap-we-dont-care: /news/1.2b-market-cap-we-dont-care
/news/author/jeremy: /team
/news/author/jeremy/2: /team
/news/author/jeremy: /team
/news/author/jimmy-kiselak: /team
/news/author/sam/page/2: /team
/news/author/sam/page/3: /team
@ -36,11 +55,10 @@
/news/every-major-tech-company-hates-you: /news
/news/get: /get
/news/ios: /ios
/news/lbry.io: /news
/news/lbry-promo-video-raw-footage: /news
/news/news/lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night: /news/lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night
/news/lbry.io: /news
/news/meet-the-lbry-founders: /team
/navframe?selectedItem=/news?selectedItem=/news: /news
/news/news/lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night: /news/lbry-app-sneak-peak-big-questions-answered-lbry-on-blocktalk-last-night
/news/news/meet-the-lbry-founders: /news/meet-the-lbry-founders
/news/news/ultimate-wizard-meet-alex-grin: /news/ultimate-wizard-meet-alex-grin
/news/page/2: /news
@ -54,16 +72,12 @@
/news/www.maidsafe.com: /news
/news/www.porcfest.com: /news/lbry-at-porcfest-first-public-screening-film-via-blockchain
/nothing-here: /news
/press-kit.zip: /press-kit
/participate: /faq/contributing
/press-kit.zip: /press-kit
/publish: /youtube
/quickstart: https://lbry.tech/playground
/slack: https://chat.lbry.io
/There: /news
/what-is-lbry: /faq/what-is-lbry
/youtube/cdSSo: /news
/youtube/sync: /faq/youtube
/faq/how-to-report-bugs: /faq/support
/faq/how-to-encrypt-wallet: https://lbry.tech/resources/encrypt-lbrycrd
/faq/proof-algorithm: https://lbry.tech/resources/pow
/faq/regtest-setup-guide: https://lbry.tech/resources/regtest-setup
/faq/claimtrie-implementation: https://lbry.tech/resources/lbry-claimtrie

View file

@ -2,6 +2,35 @@
class Github
{
const REPO_LBRY_DESKTOP = 'lbry-desktop';
public static function isAssetForOs(array $asset, string $os)
{
$ext = pathinfo($asset['name'], PATHINFO_EXTENSION);
switch($os)
{
case OS::OS_LINUX:
return
in_array($ext, ['deb']) ||
in_array($asset['content_type'], ['application/x-debian-package', 'application/x-deb']) ||
stripos($asset['name'], 'linux') !== false;
case OS::OS_OSX:
return
in_array($ext, ['dmg', 'pkg']) ||
in_array($asset['content_type'], ['application/x-diskcopy', 'application/x-apple-diskimage']) ||
stripos($asset['name'], 'darwin') !== false ||
stripos($asset['name'], 'macos') !== false;
case OS::OS_WINDOWS:
return
in_array($ext, ['exe', 'msi']) ||
stripos($asset['name'], 'windows') !== false;
case OS::OS_ANDROID:
return
in_array($ext, ['apk']) ||
stripos($asset['name'], 'android') !== false;
}
}
protected static function findReleaseAssetForOs(array $release, string $os)
{
if (!in_array($os, array_keys(OS::getAll()))) {
@ -13,85 +42,41 @@ class Github
}
foreach ($release['assets'] as $asset) {
$ext = substr($asset['name'], -4);
if (
($os == OS::OS_LINUX &&
($ext == '.deb' || in_array($asset['content_type'], ['application/x-debian-package', 'application/x-deb']))) ||
($os == OS::OS_OSX &&
($ext == '.dmg' || in_array($asset['content_type'], ['application/x-diskcopy', 'application/x-apple-diskimage']))) ||
($os == OS::OS_WINDOWS && $ext == '.exe')
) {
if (static::isAssetForOs($asset, $os)) {
return $asset;
}
}
}
public static function getAppRelease($cache = true)
public static function getRepoRelease($repo, $prerelease = false, $cache = true)
{
$endpoint = '/repos/lbryio/' . $repo . '/releases';
if (!$prerelease) {
$endpoint .= '/latest';
}
try {
return static::get('/repos/lbryio/lbry-desktop/releases/latest', [], $cache);
$releases = static::get($endpoint, [], $cache);
return $prerelease ? $releases[0] : $releases;
} catch (Exception $e) {
}
return null;
}
public static function getAppAsset($os, $cache = true)
public static function getRepoAsset($repo, $os, $prerelease = false, $cache = true)
{
$release = static::getAppRelease($cache);
$release = static::getRepoRelease($repo, $prerelease, $cache);
return $release ? static::findReleaseAssetForOs($release, $os) : null;
}
public static function getAppDownloadUrl($os, $cache = true)
public static function getRepoReleaseUrl($repo, $os, bool $prerelease = false, $cache = true)
{
$asset = static::getAppAsset($os, $cache);
$asset = static::getRepoAsset($repo, $os, $prerelease, $cache);
return $asset ? $asset['browser_download_url'] : null;
}
public static function getAppPrereleaseDownloadUrl($os, $cache = true)
{
try {
$releases = static::get('/repos/lbryio/lbry-desktop/releases', [], $cache);
if (count($releases)) {
$asset = static::findReleaseAssetForOs($releases[0], $os);
return $asset ? $asset['browser_download_url'] : null;
}
} catch (Exception $e) {
}
return null;
}
public static function getDaemonReleaseProperty($os, $property, $isAssetProperty = false, $cache = true)
{
if (!in_array($os, array_keys(OS::getAll()))) {
throw new DomainException('Unknown OS');
}
try {
$releaseData = static::get('/repos/lbryio/lbry/releases/latest', [], $cache);
foreach ($releaseData['assets'] as $asset) {
if (
($os == OS::OS_LINUX && stripos($asset['browser_download_url'], 'linux') !== false) ||
($os == OS::OS_OSX && stripos($asset['browser_download_url'], 'macos') !== false) ||
($os == OS::OS_WINDOWS && strpos($asset['browser_download_url'], 'windows') !== false)
) {
return $isAssetProperty ? $asset[$property] : $releaseData[$property];
}
}
} catch (Exception $e) {
}
return null;
}
public static function getDaemonDownloadUrl($os, $cache = true)
{
return static::getDaemonReleaseProperty($os, 'browser_download_url', true);
}
public static function get($endpoint, array $params = [], $cache = true)
{
$twoHoursInSeconds = 7200;