Merge branch 'master' into patch-4

This commit is contained in:
Zed 2017-07-05 21:21:50 +02:00 committed by GitHub
commit 2f7e005522
25 changed files with 190 additions and 70 deletions

View file

@ -0,0 +1,18 @@
---
category: browser
title: Automatic App Updates
award: 1000
status: available
date: '2017-07-22'
---
The LBRY app currently does not update itself automatically, however electron does support this feature.
To complete this bounty, [lbry-app](https://github.com/lbryio/lbry-app) must be modified as follows:
- Detect when a new latest release is available, download it and prompt the user with a "Restart LBRY" / "I'll do it later" dialog to have the update take effect.
- Parse the changelog for the latest release, if it contains `Security` items carry out the update automatically without presenting the "I'll do it later" option.
- When an update begins store an update-history tracking file detailing what the version being updated is, what version it is being updated to, and when the update happened.
- Upon starting the app after an update, alert the user that the update was successful (and note if it contained security updates), and update the history file to indicate that the update was successful.
It is probably a good idea to consult with our development team on [Slack](https://slack.lbry.io) or via email before completing this bounty in it's entirety.

View file

@ -6,22 +6,45 @@ status: available
date: '2016-07-01'
---
Add support for the BitTorrent protocol to [`lbry`](https://github.com/lbryio/lbry).
Add support for the BitTorrent protocol to [`lbrynet`](https://github.com/lbryio/lbry) and [`lbryschema`](https://www.github.com/lbryio/lbryschema).
The LBRY blockchain supports storing metadata about media content. A simplified, sample entry looks like:
The LBRY blockchain supports storing metadata that can be resolved by a human friendly uri.
This metadata is defined by a flexible protobuf based schema, [lbryschema](https://www.github.com/lbryio/lbryschema).
A simple example looks like:
```
title: "What is LBRY?",
language: "en",
description: "What is LBRY? An introduction with Alex Tabarrok",
author: "Samuel Bryan",
sources: {
lbry_sd_hash : "d5169241150022f996fa7cd6a9a1c421937276a3275eb912790bd07ba7aec1fac5fd45431d226b8fb402691e79aeb24b"
{
"version": "_0_0_1",
"claimType": "streamType",
"stream": {
"source": {
"source": "d5169241150022f996fa7cd6a9a1c421937276a3275eb912790bd07ba7aec1fac5fd45431d226b8fb402691e79aeb24b",
"version": "_0_0_1",
"contentType": "video/mp4",
"sourceType": "lbry_sd_hash"
},
"version": "_0_0_1",
"metadata": {
"license": "LBRY inc",
"description": "What is LBRY? An introduction with Alex Tabarrok",
"language": "en",
"author": "Samuel Bryan",
"title": "What is LBRY?",
"version": "_0_1_0",
"nsfw": false,
"licenseUrl": "",
"preview": "",
"thumbnail": "https://s3.amazonaws.com/files.lbry.io/logo.png"
}
}
}
```
The `sources` field is designed to be extended and support resolution to multiple protocols. To complete this the LBRY daemon must be modified to:
The [source field](https://github.com/lbryio/lbryschema/blob/master/lbryschema/proto/source.proto) is designed to be extended and support resolution to multiple protocols. To complete this, lbryschema and lbrynet must be modified to:
- Support the BitTorrent protocol via `python-libtorrent` or similar.
- Read `btih` as a source key and use this key to access the data via BitTorrent when requested
- Support the `sourceType` of `btih` in source.proto in lbryschema
- Add a BitTorrent downloader and factory for use in `EncryptedFileManager`, to be used as an alternative to `ManagedEncryptedFileDownloader`
- Use all of this to resolve a BTIH from a claim and download data via BitTorrent when requested
- Probably a lot more stuff!

View file

@ -1,7 +1,7 @@
---
category: web
title: Typos and Edits
award: 10
award: 5
status: available
date: '2016-11-01'
---
@ -10,4 +10,4 @@ This bounty is awarded for finding and correcting a typo, misspelling, or poor p
This includes everything from low-level help messages or comments in code to the copy of the website itself.
Please initiate a pull-request on GitHub to receive this bounty.
Please initiate a pull request on GitHub to receive this bounty.

View file

@ -57,7 +57,7 @@ Should LBRY make placements from this fund, it will seek long-term engagements a
## Institutional Fund
The Institutional Fund is 100m LBC reserved for the formation of institutional partnerships and benefiting organizations of need, and institutional partnerships, grants, donations, and other ways of strengthening relationships with organizations of need or like-mindedness.
The Institutional Fund is 100m LBC reserved for the formation of institutional partnerships, and for grants, donations, and other ways of strengthening relationships with organizations of need or like-mindedness.
Sample usages of this fund include:

View file

@ -9,4 +9,5 @@ We are listed on several exchanges. You can buy or sell credits at one of these:
- [Poloniex](https://poloniex.com/exchange#btc_lbc)
- [Shapeshift](https://shapeshift.io)
- [Changelly](https://changelly.com/exchange/BTC/LBC/1)
- [BitSquare](https://bitsquare.io/)
- [BitSquare](https://bitsquare.io/)
- [Cryptopia](https://www.cryptopia.co.nz/Exchange/?market=LBC_BTC)

View file

@ -7,8 +7,7 @@ Right now, it's simple: you host what you download.
While the LBRY app is running, it communicates to the network what
content you're making available. If somebody downloads content from
you, you will receive LBRY Credits (LBC) for that. The prices are
currently set by the app and can't be changed.
you, you will receive LBRY credits (LBC) for the data you upload.
Think of it like how torrents or any other peer-to-peer (P2P) service
works. First you download a file from the hosts that have it available.

View file

@ -3,4 +3,4 @@ title: How do I stop LBRY from the command line?
category: setup
---
You can ctrl-c or run `stop-lbrynet-daemon`. It is natural for the program to take 2-3 seconds to close.
You can press `ctrl-c` or run `lbrynet-cli daemon_stop`. It is natural for the program to take 2-3 seconds to close.

View file

@ -12,3 +12,4 @@ While we try to work with reliable pool operators, LBRY does not officially run
- [MaxMiners](https://maxminers.net/lbry/index.php?page=gettingstarted)
- [YIIMP](http://yiimp.ccminer.org/site/mining/lbry)
- [CoinQuarry](https://mining.coinquarry.org/)
- [AikaPool](https://aikapool.com/lbry/index.php?page=gettingstarted)

View file

@ -3,4 +3,13 @@ title: Is there a standalone wallet?
category: wallet
---
Yes, please visit [Coinomi](http://www.coinomi.com) to download their excellent wallet.
Yes, please visit [Coinomi](http://www.coinomi.com) to download their excellent and easy to use wallet.
For technical users we have [lbrycrd](https://github.com/lbryio/lbrycrd/releases), a full blockchain node very similar to bitcoind. You'll need to set up a `lbrycrd.conf` file in the `lbrycrd` [directory for your OS](https://lbry.io/faq/lbry-directories) with values for `rpcuser` and `rpcpassword` provided. For example:
```
rpcuser=lbryrpc
rpcpassword=do_not_copy_paste_this_password
```
The lbrycrdd daemon can be started with `lbrycrdd -server -printtoconsole`. For help using the command line, `lbrycrd-cli help`.

View file

@ -3,6 +3,4 @@ title: How can I see the log in the terminal?
category: developer
---
Run LBRY with the `--log-to-console` flag set:
lbrynet-daemon --log-to-console
Simply run `lbry`, or the daemon `lbrynet-daemon`, in a terminal.

View file

@ -0,0 +1,31 @@
---
author: reilly
title: 'The Root of All Good'
date: '2017-06-23 00:10:00'
cover: 'jordan-banner.jpg'
---
People do strange things for seemingly mystical reasons.
Jordan Peterson cuts through the myst and gets to the heart of, well, everyones heart.
![Jordan B Peterson](/img/news/jordan-inline.jpg)
A professor and psychologist at the University of Toronto, Dr. Peterson has lectured, written and made videos covering some of the most deeply profound topics of our time in an accessible way. From [postmodernism](lbry://jp-Urd0IK0WEWU), to what the Bible [says about our relationship to authority](lbry://jp-R-GPAl-q2QQ), to [debating house bill C16](lbry://jp-KnIAAkSNtqo), he covers the root of humanitys collective psychology in earnest.
A commenter on his Biblical series summarized his channel best:
📂Documents
└📁Videos
└📁 Jordan B Peterson
└📁 Bad Videos
└⚠️ This folder is empty
Check out some of the best lectures on LBRY at:
- lbry://@JordanBPeterson
You can learn more about Dr. Peterson, and [pre-order his next book](https://jordanbpeterson.com/12-rules-for-life/), here on his [website](https://jordanbpeterson.com/).
**Not on LBRY yet?** [Get an invite here](https://lbry.io/get). Know the meaning of life? Email reilly@lbry.io because hes desperate to know. Or sync your channel at: https://api.lbry.io/yt/connect

View file

@ -0,0 +1,23 @@
---
author: reilly
title: 'Young Gun'
date: '2017-06-29 00:10:00'
cover: 'lukehall-banner.jpg'
---
Continuing with our slate of indie musicians is a young, entrepreneurial artist we found on Twitter.
When we mean LBRY enables anyone to monetize content, we mean from the biggest Disneys to the self-made fresh EPs of artists taking their first leap of faith. Its a level playing field.
![Luke Hall](/img/news/lukehall-inline.jpg)
Luke Hall recently released his debut EP, and spent no time learning the ropes of LBRY. I was so blown away by his commitment to learning LBRY hands-on after a shout-out on Twitter.
This is the first channel I know on LBRY to host a variety of multimedia options--hat tip to Matt Skokol for [his musicians guide to publishing](https://medium.com/@heymattsokol/how-to-upload-and-sell-your-music-on-lbry-fa4f299413a1)--from music videos to mp3 streams to a full downloadable album, everything a musician could offer is available on Luke Halls LBRY channel at a variety of prices.
Please do yourselves the honor, and get your indie electronica on at:
<a href='lbry://@iamlukehall'>@iamlukehall</a>
<a href='lbry://pieceofmind-mp3bundle'>pieceofmind-mp3bundle</a>
**Not on LBRY yet?** [Get an invite here](https://lbry.io/get). Can you make sick beats? Email reilly@lbry.io because hes still listening to the same things he did at university eight years ago. Or sync your channel at: https://api.lbry.io/yt/connect

View file

@ -14,17 +14,16 @@ On our [official bounty page](https://lbry.io/bounty), youll find details for
The bounty list will be constantly growing, so bookmark it and check in regularly for updates. Youll currently find:
- [Adding support for BitTorrent](https://lbry.io/bounty/bittorrent-support) 4,000 LBC
- [Add transaction history to LBRY browser](https://lbry.io/bounty/transaction-history) 2,000 LBC
- [Modified block explorer](https://lbry.io/bounty/modified-block-explorer) 1,500 LBC
- [PKG installer for OS X](https://lbry.io/bounty/pkg-installer-for-osx) 1,500 LBC
- [Create URL handler for Slack](https://lbry.io/bounty/slack-lbry-url-handler) 1,000 LBC
- [Internationalization of lbry.io](https://lbry.io/bounty/web-i18n) 1,000 LBC
- [LBRY Community Rep](https://lbry.io/bounty/lbry-club) 500 LBC
- [Write, broadcast or share LBRY](https://lbry.io/bounty/pr-for-lbry) 500 LBC
- [Create social media cover images](https://lbry.io/bounty/social-media-cover-images) - 400 LBC
- [Publish open content](https://lbry.io/bounty/publish-open-content) 250-1,000+ LBC
- [Refer a publisher to LBRY](https://lbry.io/bounty/refer-publisher) 100 LBC
- [Adding support for BitTorrent](https://lbry.io/bounty/bittorrent-support) 17,660 LBC
- [Adding support for HTTP](https://lbry.io/bounty/http-support) 5,220 LBC
- [Internationalization of lbry.io](https://lbry.io/bounty/web-i18n) 3,530 LBC
- [LBRY Community Rep](https://lbry.io/bounty/lbry-club) 530 LBC
- [Write, broadcast or share LBRY](https://lbry.io/bounty/pr-for-lbry) 440 LBC
- [Publish open content](https://lbry.io/bounty/publish-open-content) 500-10,000+ LBC
- [Refer a publisher to LBRY](https://lbry.io/bounty/refer-publisher) 440 LBC
- [Automatic App Updates](https://lbry.io/bounty/automatic-app-updates) 1,740 LBC
- [Custom Project](https://lbry.io/bounty/custom-project) 250-50,000+ LBC
- [Typos and Edits](https://lbry.io/bounty/typos-and-edits) 5-10 LBC
You can even [pitch us your own custom project](https://lbry.io/bounty/custom-project) and earn as much as *20,000 LBC* (reward determined by LBRY team).

View file

@ -134,7 +134,7 @@ class Controller
'/api' => 'https://lbryio.github.io/lbry',
'/api-help' => 'https://lbryio.github.io/lbry',
'/security' => '/faq/security',
'/live' => 'https://www.youtube.com/channel/UCXAcp3dJuPqeUekOacsuyaQ',
'/live' => 'https://www.youtube.com/watch?v=WM60vLOCRps', //'https://www.youtube.com/channel/UCXAcp3dJuPqeUekOacsuyaQ',
];

View file

@ -220,9 +220,9 @@ class ContentActions extends Actions
{
$lastItem = end($items);
$project = $lastItem['project'];
if (!isset($projectMaxVersions[$project]) || strnatcasecmp($lastItem['version'], $projectMaxVersions[$project]) > 0)
if (!isset($projectMaxVersions[$project]) || $lastItem['sort_key'] > $projectMaxVersions[$project])
{
$projectMaxVersions[$project] = $lastItem['version'];
$projectMaxVersions[$project] = $lastItem['sort_key'];
}
}
}

View file

@ -19,7 +19,7 @@ class Asana
$tasks = [];
$tags = [
192699565737944 => 'Ongoing',
192699565737944 => 'Open Beta',
192699565737946 => 'Upcoming',
192699565737948 => 'Future'
];
@ -40,12 +40,14 @@ class Asana
else
{
$projectName = 'Other';
$projectId = null;
}
$tasks[$tagLabel][] = array_intersect_key($fullTask, ['name' => null]) + [
'badge' => $projectName,
'date' => $fullTask['due_on'] ?? null,
'body' => nl2br($fullTask['notes']) ,
'body' => nl2br($fullTask['notes']),
'group' => $tagLabel,
'project_id' => $projectId,
'assignee' => $fullTask['assignee'] ? ucwords($fullTask['assignee']['name']) : ''
];
}
@ -64,6 +66,10 @@ class Asana
{
return $tA['date'] ? -1 : 1;
}
if ($tA['project_id'] xor $tB['project_id'])
{
return $tA['project_id'] ? -1 : 1;
}
return $tA['date'] < $tB['date'] ? -1 : 1;
});
}

View file

@ -106,21 +106,24 @@ class Github
$sets = [];
$allReleases = [];
$project = 'lbry';
$page = 1;
$projects = ['lbry' => 'Daemon', 'lbry-app' => 'App'];
do
foreach($projects as $project => $projectLabel)
{
$releases = static::get('/repos/lbryio/' . $project . '/releases?page=' . $page, $cache);
$page++;
$allReleases = array_merge($allReleases, array_map(function ($release) use ($project)
$page = 1;
do
{
return $release + ['project' => $project];
}, array_filter($releases, function ($release)
{
return ($release['tag_name'] ?? null) && ($release['published_at'] ?? null) && !$release['prerelease'];
})));
} while (count($releases) >= 30);
$releases = static::get('/repos/lbryio/' . $project . '/releases?page=' . $page, $cache);
$page++;
$allReleases = array_merge($allReleases, array_map(function ($release) use ($project, $projectLabel)
{
return $release + ['project' => $projectLabel];
}, array_filter($releases, function ($release)
{
return isset($release['tag_name']) && isset($release['published_at']) && $release['published_at'];
})));
} while (count($releases) >= 30);
}
foreach ($allReleases as $release)
{
@ -128,23 +131,36 @@ class Github
$matches = null;
if (preg_match('/^v(\d+)\.(\d+)\./', $release['tag_name'] ?? '', $matches))
{
$group = 'v' . $matches[1] . '.' . $matches[2];
$group = $release['project'] . ' v' . $matches[1] . '.' . $matches[2];
}
if ($group)
{
$sets[$group][] = [
'project' => $release['project'],
'date' => date('Y-m-d', strtotime($release['created_at'])),
'created_at' => $release['created_at'],
'name' => $release['name'] ?: $release['tag_name'],
'url' => $release['html_url'],
'version' => $release['tag_name'],
'body' => ParsedownExtra::instance()->text($release['body'])
];
$sets[$group][] = array_intersect_key($release, [
'prerelease' => null, 'tag_name' => null, 'published_at' => null, 'project' => null
]) + [
'date' => date('Y-m-d', strtotime($release['created_at'])),
//I thought published_at, but GitHub displays created_at and published_at is out of sync sometimes (0.3.2, 0.3.3)
'name' => $release['name'] ?: $release['tag_name'],
'url' => $release['html_url'],
'major_version' => (int)$matches[1],
'minor_version' => (int)$matches[2],
'patch_version' => (int)isset($matches[3]) ? $matches[3] : 0,
'sort_key' => (int)$matches[1] * 1000000 + (int)$matches[2] * 1000 + (int)($matches[3] ?? 0),
'version' => $matches[1] . '.' . $matches[2] . '.' . (isset($matches[3]) ? $matches[3] : ''),
'body' => ParsedownExtra::instance()->text($release['body'])
];
}
}
uasort($sets, function ($sA, $sB) { return $sA[0]['created_at'] <=> $sB[0]['created_at']; });
uasort($sets, function ($sA, $sB)
{
if ($sA[0]['project'] != $sB[0]['project'])
{
return $sA[0]['project'] < $sB[0]['project'] ? -1 : 1;
}
return $sA[0]['sort_key'] < $sB[0]['sort_key'] ? -1 : 1;
});
foreach ($sets as $group => &$groupSet)
{
usort($groupSet, function ($rA, $rB) { return $rA['created_at'] <=> $rB['created_at']; });

View file

@ -13,7 +13,7 @@ class Mailgun
{
list($status, $headers, $body) = static::post('/' . static::MAIL_DOMAIN . '/messages', [
'from' => 'LBRY <mail@' . static::MAIL_DOMAIN . '>',
'to' => 'jeremy@lbry.io',
'to' => 'help@lbry.io',
'subject' => 'DMCA Report #' . $data['report_id'],
'html' => '<pre>' . var_export($data, true) . '</pre>',
'o:tracking-clicks' => 'no',

View file

@ -29,15 +29,15 @@
<div class="text-center"><a href="javascript:;" class="link-primary show-all-roadmap-groups">Show Earlier Releases</a></div>
<?php foreach($items as $group => $groupItems): ?>
<?php $lastItem = end($groupItems) ?>
<?php $isOpen = !isset($lastItem['project']) || !isset($lastItem['version']) || $lastItem['version'] === $projectMaxVersions[$lastItem['project']] ?>
<?php $isOpen = !isset($lastItem['project']) || !isset($lastItem['sort_key']) || $lastItem['sort_key'] === $projectMaxVersions[$lastItem['project']] ?>
<h2 class="roadmap-group-title" <?php echo !$isOpen ? 'style="display: none"' : '' ?>">
<span class="roadmap-group-title-label">
<?php echo $group ?> <?php echo isset($lastItem['version']) && $lastItem['version'] === $projectMaxVersions[$lastItem['project']] ? '(latest)' : '' ?>
<?php echo $group ?> <?php echo isset($lastItem['sort_key']) && $lastItem['sort_key'] === $projectMaxVersions[$lastItem['project']] ? '(latest)' : '' ?>
</span>
</h2>
<div class="roadmap-group <?php echo !$isOpen ? 'roadmap-group-closed' : '' ?>">
<?php $lastItem = end($groupItems) ?>
<?php $maxItems = isset($lastItem['version']) ? 1 : count($groupItems) ?>
<?php $maxItems = isset($lastItem['sort_key']) ? 1 : count($groupItems) ?>
<?php $index = 0 ?>
<?php if (count($groupItems) > $maxItems): ?>
<div class="text-center spacer1"><a href="javascript:;" class="link-primary show-all-roadmap-group-items">Show All Items for <?php echo $group ?></a></div>

View file

@ -8,11 +8,7 @@
<ul>
<li><h3>Learned the basics of the LBRY API.</h3></li>
<li><h3>Irrevocably inscribed a piece of knowledge. Possibly of a cat.</h3>
<div class="meta">
<sup>1</sup>USD price equivalent of <?php echo DeveloperActions::DEVELOPER_REWARD ?> LBC as received from the <a href="https://bittrex.com/Market/Index?MarketName=BTC-LBC" class="link-primary">Bittrex</a> exchange.
LBC is a cryptographic blockchain token used to secure and administer LBRY's shared, distributed catalog. The future is weird.
</div>
</li>
</li>
</ul>
<p class="text-center">
<a href="/quickstart/<?php echo $firstStep ?>" class="btn-alt">Begin the Guide</a>

View file

@ -1,5 +1,5 @@
<h3>{{title.refer}}</h3>
<p>{{page.refer.earn1}} <?php echo i18n::formatCredits($prefineryUser['id'] < 75000 ? 10 : 5) ?> {{page.refer.earn2}}</p>
<p>{{page.refer.earn1}} <?php echo i18n::formatCredits($prefineryUser['id'] < 75000 ? 10 : (date('Y-m-d') > '2017-06-19' ? 2.5 : 5)) ?> {{page.refer.earn2}}</p>
<p>
<input type="text" value="<?php echo Request::getHostAndProto() ?>/get?r=<?php echo $referralCode ?>" style="width: 100%; border-color: #155B4A" readonly id="referral-url-input"/>
<?php js_start() ?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB