forked from LBRYCommunity/lbry-sdk
Merge branch 'master' into autodownloader
This commit is contained in:
commit
75fbedeeac
7 changed files with 170 additions and 92 deletions
|
@ -8,7 +8,9 @@ built into LBRYnet.
|
||||||
|
|
||||||
on Ubuntu:
|
on Ubuntu:
|
||||||
|
|
||||||
|
```
|
||||||
sudo apt-get install libgmp3-dev build-essential python-dev python-pip
|
sudo apt-get install libgmp3-dev build-essential python-dev python-pip
|
||||||
|
```
|
||||||
|
|
||||||
Getting the source
|
Getting the source
|
||||||
------------------
|
------------------
|
||||||
|
@ -20,15 +22,19 @@ Setting up the environment
|
||||||
|
|
||||||
It's recommended that you use a virtualenv
|
It's recommended that you use a virtualenv
|
||||||
|
|
||||||
|
```
|
||||||
sudo apt-get install python-virtualenv
|
sudo apt-get install python-virtualenv
|
||||||
cd <source base directory>
|
cd <source base directory>
|
||||||
virtualenv .
|
virtualenv .
|
||||||
source bin/activate
|
source bin/activate
|
||||||
|
```
|
||||||
|
|
||||||
(to deactivate the virtualenv, enter 'deactivate')
|
(to deactivate the virtualenv, enter 'deactivate')
|
||||||
|
|
||||||
|
```
|
||||||
python setup.py install
|
python setup.py install
|
||||||
|
```
|
||||||
|
|
||||||
this will install all of the libraries and a few applications
|
this will install all of the libraries and a few applications
|
||||||
|
|
||||||
For running the file sharing application, see RUNNING
|
For running the file sharing application, see [RUNNING](RUNNING.md)
|
||||||
|
|
|
@ -28,11 +28,11 @@ must first obtain the 'stream descriptor' and then may open it with his 'lbrynet
|
||||||
download all of the chunks by locating peers with the chunks via the DHT, and then combine the
|
download all of the chunks by locating peers with the chunks via the DHT, and then combine the
|
||||||
chunks into the original file, according to the metadata included in the 'stream descriptor'.
|
chunks into the original file, according to the metadata included in the 'stream descriptor'.
|
||||||
|
|
||||||
To install and use this client, see INSTALL and RUNNING
|
To install and use this client, see [INSTALL](INSTALL.md) and [RUNNING](RUNNING.md)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
See INSTALL
|
See [INSTALL](INSTALL.md)
|
||||||
|
|
||||||
## Developers
|
## Developers
|
||||||
|
|
||||||
|
@ -47,4 +47,4 @@ Send all support requests to jimmy@lbry.io
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
See LICENSE
|
See [LICENSE](LICENSE)
|
||||||
|
|
70
RUNNING.md
70
RUNNING.md
|
@ -8,59 +8,55 @@ Download the file https://raw.githubusercontent.com/lbryio/lbry-setup/master/lbr
|
||||||
|
|
||||||
Once it's done building, type:
|
Once it's done building, type:
|
||||||
|
|
||||||
|
```
|
||||||
./lbrycrd/src/lbrycrdd -server -daemon
|
./lbrycrd/src/lbrycrdd -server -daemon
|
||||||
|
|
||||||
lbrynet-gui
|
lbrynet-gui
|
||||||
|
```
|
||||||
|
|
||||||
A window should show up with an entry box
|
A window should show up with an entry box
|
||||||
|
|
||||||
Type wonderfullife into the box, hit go, and choose to stream or save
|
Type wonderfullife into the box, hit go, and choose to stream or save
|
||||||
|
|
||||||
To stop lbrycrdd:
|
To stop lbrycrdd: `./lbrycrd/src/lbrycrd-cli stop`
|
||||||
|
|
||||||
./lbrycrd/src/lbrycrd-cli stop
|
|
||||||
|
|
||||||
## Slightly longer install guide
|
## Slightly longer install guide
|
||||||
|
|
||||||
### Installing lbrycrd from source
|
### Installing lbrycrd from source
|
||||||
|
|
||||||
Acquire the LBRYcrd source code from https://github.com/lbryio/lbrycrd
|
```
|
||||||
|
git clone --depth=1 https://github.com/lbryio/lbrycrd.git
|
||||||
cd lbrycrd
|
cd lbrycrd
|
||||||
|
|
||||||
sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev libboost-all-dev libdb-dev libdb++-dev libqt4-dev libprotobuf-dev protobuf-compiler
|
sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev libboost-all-dev libdb-dev libdb++-dev libqt4-dev libprotobuf-dev protobuf-compiler
|
||||||
|
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
|
./configure --with-incompatible-bdb --without-gui
|
||||||
./configure --with-incompatible-bdb
|
|
||||||
|
|
||||||
make
|
make
|
||||||
|
```
|
||||||
|
|
||||||
When make has completed, create the directory where LBRYcrd data will be stored. ~/.lbrycrd is where LBRYcrd will look by default and so is recommended.
|
When make has completed, create the directory where LBRYcrd data will be stored. ~/.lbrycrd is where LBRYcrd will look by default and so is recommended.
|
||||||
|
|
||||||
|
```
|
||||||
mkdir ~/.lbrycrd
|
mkdir ~/.lbrycrd
|
||||||
|
echo 'rpcuser=rpcuser
|
||||||
vim ~/.lbrycrd/lbrycrd.conf
|
rpcpassword=rpcpassword' > ~/.lbrycrd/lbrycrd.conf
|
||||||
|
# (use a long random password if your computer is on a network anyone else has access to. e.g, pwgen -s 20)
|
||||||
Add the following lines to enable the RPC interface, which will be used by lbrynet-console.
|
|
||||||
|
|
||||||
rpcuser=rpcuser
|
|
||||||
|
|
||||||
rpcpassword=rpcpassword
|
|
||||||
|
|
||||||
(use a long random password if your computer is on a network anyone else has access to)
|
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### Installing lbrynet from source
|
### Installing lbrynet from source
|
||||||
|
|
||||||
Acquire the LBRYnet source code from https://github.com/lbryio/lbry
|
Acquire the LBRYnet source code from https://github.com/lbryio/lbry
|
||||||
|
|
||||||
|
```
|
||||||
cd lbry
|
cd lbry
|
||||||
sudo apt-get install libgmp3-dev build-essential python-dev python-pip
|
sudo apt-get install libgmp3-dev build-essential python-dev python-pip
|
||||||
|
```
|
||||||
|
|
||||||
(with virtualenv)
|
(with virtualenv)
|
||||||
|
|
||||||
|
```
|
||||||
python-virtualenv
|
python-virtualenv
|
||||||
|
|
||||||
virtualenv .
|
virtualenv .
|
||||||
|
@ -69,33 +65,45 @@ source bin/activate
|
||||||
|
|
||||||
python setup.py install
|
python setup.py install
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
to deactivate the virtualenv later:
|
to deactivate the virtualenv later:
|
||||||
|
|
||||||
|
```
|
||||||
deactivate
|
deactivate
|
||||||
|
```
|
||||||
|
|
||||||
to reactivate it, go to the directory in which you created it and:
|
to reactivate it, go to the directory in which you created it and:
|
||||||
|
|
||||||
|
```
|
||||||
source bin/activate
|
source bin/activate
|
||||||
|
```
|
||||||
|
|
||||||
(without virtualenv)
|
(without virtualenv)
|
||||||
|
|
||||||
|
```
|
||||||
python setup.py build bdist_egg
|
python setup.py build bdist_egg
|
||||||
|
|
||||||
sudo python setup.py install
|
sudo python setup.py install
|
||||||
|
```
|
||||||
|
|
||||||
## Slightly longer running guide
|
## Slightly longer running guide
|
||||||
|
|
||||||
In order to use lbrynet-console or lbrynet-gui, lbyrcrdd must be running.
|
###In order to use lbrynet-console or lbrynet-gui, lbyrcrd must be running.
|
||||||
|
|
||||||
### Running lbrycrd
|
### Running lbrycrd
|
||||||
|
|
||||||
If you ran the easy install script, the lbrycrd folder will be in the directory you ran lbry_setup.sh from. Otherwise it is the root of the cloned lbrycrd repository. Go to that directory.
|
If you ran the easy install script, the lbrycrd folder will be in the directory you ran lbry_setup.sh from. Otherwise it is the root of the cloned lbrycrd repository. Go to that directory.
|
||||||
|
|
||||||
|
```
|
||||||
./src/lbrycrdd -server -daemon
|
./src/lbrycrdd -server -daemon
|
||||||
|
```
|
||||||
|
|
||||||
If you want to mine LBC, also use the flag '-gen', so:
|
If you want to mine LBC, also use the flag '-gen', so:
|
||||||
|
|
||||||
|
```
|
||||||
./src/lbrycrdd -server -daemon -gen
|
./src/lbrycrdd -server -daemon -gen
|
||||||
|
```
|
||||||
|
|
||||||
It will take a few minutes for your client to download the whole block chain.
|
It will take a few minutes for your client to download the whole block chain.
|
||||||
|
|
||||||
|
@ -103,35 +111,31 @@ lbrycrdd must be running in order for lbrynet to function.
|
||||||
|
|
||||||
To shut lbrycrdd down: from the lbrycrd directory, run
|
To shut lbrycrdd down: from the lbrycrd directory, run
|
||||||
|
|
||||||
./src/lbrycrd-cli stop
|
```
|
||||||
|
./src/lbrycrd-cli stop
|
||||||
|
```
|
||||||
|
|
||||||
### Option 1) Running lbrynet-console
|
### Option 1) Running lbrynet-console
|
||||||
|
|
||||||
If you used the virtualenv instructions above, make sure the virtualenv is still active. If not, reactivate it according to the instructions above, under "Installing lbrynet from source"
|
If you used the virtualenv instructions above, make sure the virtualenv is still active. If not, reactivate it according to the instructions above, under "Installing lbrynet from source"
|
||||||
|
|
||||||
In your terminal:
|
In your terminal: `lbrynet-console`
|
||||||
|
|
||||||
lbrynet-console
|
|
||||||
|
|
||||||
You should be presented with a prompt.
|
You should be presented with a prompt.
|
||||||
|
|
||||||
Watch It's a Wonderful Life via LBRY
|
Watch It's a Wonderful Life via LBRY
|
||||||
|
|
||||||
Type into the prompt:
|
Type into the prompt: `get wonderfullife`
|
||||||
|
|
||||||
get wonderfullife
|
To shut it down, press ctrl-c at any time or enter `exit` into the prompt.
|
||||||
|
|
||||||
To shut it down, type ctrl-c at any time or enter 'exit' into the prompt.
|
|
||||||
|
|
||||||
### Option 2) Running lbrynet-gui
|
### Option 2) Running lbrynet-gui
|
||||||
|
|
||||||
If you used the virtualenv instructions above, make sure the virtualenv is still active. If not, reactivate it according to the instructions above, under "Installing lbrynet from source"
|
If you used the virtualenv instructions above, make sure the virtualenv is still active. If not, reactivate it according to the instructions above, under "Installing lbrynet from source"
|
||||||
|
|
||||||
In your terminal:
|
In your terminal: `lbrynet-gui`
|
||||||
|
|
||||||
lbrynet-gui
|
A window should pop up with an entry box. Type `wonderfullife` into the box, hit go, and then choose to save it or stream it.
|
||||||
|
|
||||||
A window should pop up with an entry box. Type 'wonderfullife' into the box, hit go, and then choose to save it or stream it.
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|
||||||
Any questions or problems, email jimmy@lbry.io
|
Any questions or problems, email jimmy@lbry.io
|
||||||
|
|
|
@ -275,7 +275,7 @@ class LBRYcrdWallet(object):
|
||||||
value_dict = json.loads(value)
|
value_dict = json.loads(value)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return Failure(InvalidStreamInfoError(name))
|
return Failure(InvalidStreamInfoError(name))
|
||||||
known_fields = ['stream_hash', 'name', 'description', 'key_fee', 'key_fee_address']
|
known_fields = ['stream_hash', 'name', 'description', 'key_fee', 'key_fee_address', 'thumbnail']
|
||||||
for field in known_fields:
|
for field in known_fields:
|
||||||
if field in value_dict:
|
if field in value_dict:
|
||||||
r_dict[field] = value_dict[field]
|
r_dict[field] = value_dict[field]
|
||||||
|
|
|
@ -397,6 +397,8 @@ class LBRYDownloader(object):
|
||||||
stream_frame.show_name(value['name'])
|
stream_frame.show_name(value['name'])
|
||||||
if 'description' in value:
|
if 'description' in value:
|
||||||
stream_frame.show_description(value['description'])
|
stream_frame.show_description(value['description'])
|
||||||
|
if 'thumbnail' in value:
|
||||||
|
stream_frame.show_thumbnail(value['thumbnail'])
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def get_sd_hash(value):
|
def get_sd_hash(value):
|
||||||
|
@ -437,7 +439,7 @@ class LBRYDownloader(object):
|
||||||
else:
|
else:
|
||||||
estimated_cost = "unknown"
|
estimated_cost = "unknown"
|
||||||
|
|
||||||
stream_frame.show_stream_metadata(stream_name, stream_size)
|
stream_frame.show_stream_metadata(stream_name, stream_size, estimated_cost)
|
||||||
|
|
||||||
available_options = metadata.options.get_downloader_options(metadata.validator,
|
available_options = metadata.options.get_downloader_options(metadata.validator,
|
||||||
payment_rate_manager)
|
payment_rate_manager)
|
||||||
|
|
|
@ -56,7 +56,8 @@ class StreamFrame(object):
|
||||||
|
|
||||||
self.name_frame = ttk.Frame(self.stream_frame_body, style="D.TFrame")
|
self.name_frame = ttk.Frame(self.stream_frame_body, style="D.TFrame")
|
||||||
self.name_frame.grid(sticky=tk.W + tk.E)
|
self.name_frame.grid(sticky=tk.W + tk.E)
|
||||||
self.name_frame.grid_columnconfigure(0, weight=1)
|
self.name_frame.grid_columnconfigure(0, weight=16)
|
||||||
|
self.name_frame.grid_columnconfigure(1, weight=1)
|
||||||
|
|
||||||
self.stream_frame_body.grid_columnconfigure(0, weight=1)
|
self.stream_frame_body.grid_columnconfigure(0, weight=1)
|
||||||
|
|
||||||
|
@ -69,42 +70,45 @@ class StreamFrame(object):
|
||||||
self.outer_button_frame = ttk.Frame(self.stream_frame_body, style="D.TFrame")
|
self.outer_button_frame = ttk.Frame(self.stream_frame_body, style="D.TFrame")
|
||||||
self.outer_button_frame.grid(sticky=tk.W + tk.E, row=4)
|
self.outer_button_frame.grid(sticky=tk.W + tk.E, row=4)
|
||||||
|
|
||||||
show_options_picture_file_name = "show_options.gif"
|
#show_options_picture_file_name = "show_options.gif"
|
||||||
if os.name == "nt":
|
#if os.name == "nt":
|
||||||
show_options_picture_file = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
|
# show_options_picture_file = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
|
||||||
"lbrynet", "lbrynet_downloader_gui",
|
# "lbrynet", "lbrynet_downloader_gui",
|
||||||
show_options_picture_file_name)
|
# show_options_picture_file_name)
|
||||||
else:
|
#else:
|
||||||
show_options_picture_file = os.path.join(os.path.dirname(__file__),
|
# show_options_picture_file = os.path.join(os.path.dirname(__file__),
|
||||||
show_options_picture_file_name)
|
# show_options_picture_file_name)
|
||||||
|
|
||||||
self.show_options_picture = tk.PhotoImage(
|
#self.show_options_picture = tk.PhotoImage(
|
||||||
file=show_options_picture_file
|
# file=show_options_picture_file
|
||||||
)
|
#)
|
||||||
|
|
||||||
hide_options_picture_file_name = "hide_options.gif"
|
#hide_options_picture_file_name = "hide_options.gif"
|
||||||
if os.name == "nt":
|
#if os.name == "nt":
|
||||||
hide_options_picture_file = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
|
# hide_options_picture_file = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),
|
||||||
"lbrynet", "lbrynet_downloader_gui",
|
# "lbrynet", "lbrynet_downloader_gui",
|
||||||
hide_options_picture_file_name)
|
# hide_options_picture_file_name)
|
||||||
else:
|
#else:
|
||||||
hide_options_picture_file = os.path.join(os.path.dirname(__file__),
|
# hide_options_picture_file = os.path.join(os.path.dirname(__file__),
|
||||||
hide_options_picture_file_name)
|
# hide_options_picture_file_name)
|
||||||
|
|
||||||
self.hide_options_picture = tk.PhotoImage(
|
#self.hide_options_picture = tk.PhotoImage(
|
||||||
file=hide_options_picture_file
|
# file=hide_options_picture_file
|
||||||
)
|
#)
|
||||||
|
|
||||||
self.show_options_button = None
|
#self.show_options_button = None
|
||||||
|
|
||||||
self.status_label = None
|
self.status_label = None
|
||||||
self.name_label = None
|
#self.name_label = None
|
||||||
|
self.name_text = None
|
||||||
|
self.estimated_cost_frame = None
|
||||||
self.bytes_downloaded_label = None
|
self.bytes_downloaded_label = None
|
||||||
self.button_frame = None
|
self.button_frame = None
|
||||||
self.download_buttons = []
|
self.download_buttons = []
|
||||||
self.option_frames = []
|
self.option_frames = []
|
||||||
self.name_font = None
|
self.name_font = None
|
||||||
self.description_label = None
|
self.description_text = None
|
||||||
|
#self.description_label = None
|
||||||
self.file_name_frame = None
|
self.file_name_frame = None
|
||||||
self.cost_frame = None
|
self.cost_frame = None
|
||||||
self.cost_description = None
|
self.cost_description = None
|
||||||
|
@ -119,22 +123,72 @@ class StreamFrame(object):
|
||||||
self.stream_frame.destroy()
|
self.stream_frame.destroy()
|
||||||
self.app.stream_removed()
|
self.app.stream_removed()
|
||||||
|
|
||||||
|
def _resize_text(self, text_widget):
|
||||||
|
actual_height = text_widget.tk.call(text_widget._w, "count", "-displaylines", "0.0", "end")
|
||||||
|
text_widget.config(height=int(actual_height))
|
||||||
|
|
||||||
def show_name(self, name):
|
def show_name(self, name):
|
||||||
self.name_font = tkFont.Font(size=16)
|
self.name_font = tkFont.Font(size=16)
|
||||||
self.name_label = ttk.Label(
|
#self.name_label = ttk.Label(
|
||||||
self.name_frame, text=name, font=self.name_font
|
# self.name_frame, text=name, font=self.name_font
|
||||||
|
#)
|
||||||
|
#self.name_label.grid(row=0, column=0, sticky=tk.W)
|
||||||
|
self.name_text = tk.Text(
|
||||||
|
self.name_frame, font=self.name_font, wrap=tk.WORD, relief=tk.FLAT, borderwidth=0,
|
||||||
|
highlightthickness=0, width=1, height=1
|
||||||
)
|
)
|
||||||
self.name_label.grid(row=0, column=0, sticky=tk.W)
|
self.name_text.insert(tk.INSERT, name)
|
||||||
|
self.name_text.config(state=tk.DISABLED)
|
||||||
|
self.name_text.grid(row=0, column=0, sticky=tk.W+tk.E+tk.N+tk.S)
|
||||||
|
self.name_text.update()
|
||||||
|
self._resize_text(self.name_text)
|
||||||
|
|
||||||
def show_description(self, description):
|
def show_description(self, description):
|
||||||
if os.name == "nt":
|
#if os.name == "nt":
|
||||||
wraplength = 580
|
# wraplength = 580
|
||||||
else:
|
#else:
|
||||||
wraplength = 600
|
# wraplength = 600
|
||||||
self.description_label = ttk.Label(
|
#self.description_label = ttk.Label(
|
||||||
self.name_frame, text=description, wraplength=wraplength
|
# self.name_frame, text=description, wraplength=wraplength
|
||||||
|
#)
|
||||||
|
#self.description_label.grid(row=1, column=0, sticky=tk.W)
|
||||||
|
self.description_text = tk.Text(
|
||||||
|
self.name_frame, wrap=tk.WORD, relief=tk.FLAT, borderwidth=0,
|
||||||
|
highlightthickness=0, width=1, height=1
|
||||||
)
|
)
|
||||||
self.description_label.grid(row=1, column=0, sticky=tk.W)
|
self.description_text.insert(tk.INSERT, description)
|
||||||
|
self.description_text.config(state=tk.DISABLED)
|
||||||
|
self.description_text.grid(row=1, column=0, sticky=tk.W+tk.E+tk.N+tk.S)
|
||||||
|
self.description_text.update()
|
||||||
|
self._resize_text(self.description_text)
|
||||||
|
|
||||||
|
def show_thumbnail(self, url=None):
|
||||||
|
thumbnail = None
|
||||||
|
if url is not None:
|
||||||
|
import urllib2
|
||||||
|
import base64
|
||||||
|
response = urllib2.urlopen(url)
|
||||||
|
thumbnail_data = base64.b64encode(response.read())
|
||||||
|
thumbnail = tk.PhotoImage(data=thumbnail_data)
|
||||||
|
current_width = thumbnail.width()
|
||||||
|
current_height = thumbnail.height()
|
||||||
|
max_width = 130
|
||||||
|
max_height = 90
|
||||||
|
scale_ratio = max(1.0 * current_width / max_width, 1.0 * current_height / max_height)
|
||||||
|
if scale_ratio < 1:
|
||||||
|
scale_ratio = 1
|
||||||
|
else:
|
||||||
|
scale_ratio = int(scale_ratio + 1)
|
||||||
|
thumbnail = thumbnail.subsample(scale_ratio)
|
||||||
|
if thumbnail is not None:
|
||||||
|
label = ttk.Label(self.name_frame, image=thumbnail)
|
||||||
|
label.safekeeping = thumbnail
|
||||||
|
label.grid(row=0, column=1, rowspan=2, sticky=tk.E+tk.N+tk.W+tk.S)
|
||||||
|
label.update()
|
||||||
|
self.description_text.update()
|
||||||
|
self.name_text.update()
|
||||||
|
self._resize_text(self.description_text)
|
||||||
|
self._resize_text(self.name_text)
|
||||||
|
|
||||||
def show_metadata_status(self, value):
|
def show_metadata_status(self, value):
|
||||||
if self.status_label is None:
|
if self.status_label is None:
|
||||||
|
@ -166,7 +220,7 @@ class StreamFrame(object):
|
||||||
return "%.1f %s" % (round((stream_size * 1.0 / factor), 1), units)
|
return "%.1f %s" % (round((stream_size * 1.0 / factor), 1), units)
|
||||||
return stream_size
|
return stream_size
|
||||||
|
|
||||||
def show_stream_metadata(self, stream_name, stream_size):
|
def show_stream_metadata(self, stream_name, stream_size, stream_cost):
|
||||||
if self.status_label is not None:
|
if self.status_label is not None:
|
||||||
self.status_label.destroy()
|
self.status_label.destroy()
|
||||||
|
|
||||||
|
@ -186,6 +240,17 @@ class StreamFrame(object):
|
||||||
)
|
)
|
||||||
file_name_label.grid(row=0, column=3)
|
file_name_label.grid(row=0, column=3)
|
||||||
|
|
||||||
|
self.estimated_cost_frame = ttk.Frame(self.metadata_frame, style="F.TFrame")
|
||||||
|
self.estimated_cost_frame.grid(row=1, column=0, sticky=tk.W)
|
||||||
|
|
||||||
|
estimated_cost_label = ttk.Label(
|
||||||
|
self.estimated_cost_frame,
|
||||||
|
text=locale.format_string("%.2f LBC",
|
||||||
|
(round(stream_cost, 2)), grouping=True),
|
||||||
|
foreground="red"
|
||||||
|
)
|
||||||
|
estimated_cost_label.grid(row=1, column=2)
|
||||||
|
|
||||||
self.button_frame = ttk.Frame(self.outer_button_frame, style="E.TFrame")
|
self.button_frame = ttk.Frame(self.outer_button_frame, style="E.TFrame")
|
||||||
self.button_frame.grid(row=0, column=1)
|
self.button_frame.grid(row=0, column=1)
|
||||||
|
|
||||||
|
@ -309,12 +374,12 @@ class StreamFrame(object):
|
||||||
option_widget = self.get_option_widget(option.option_types[0], choice_frame)
|
option_widget = self.get_option_widget(option.option_types[0], choice_frame)
|
||||||
option_widget.grid(row=0, column=0, sticky=tk.W)
|
option_widget.grid(row=0, column=0, sticky=tk.W)
|
||||||
f.option_widget = option_widget
|
f.option_widget = option_widget
|
||||||
self.show_options_button = ttk.Button(
|
#self.show_options_button = ttk.Button(
|
||||||
self.stream_frame_body, command=self._toggle_show_options, style="Stop.TButton",
|
# self.stream_frame_body, command=self._toggle_show_options, style="Stop.TButton",
|
||||||
cursor=self.button_cursor
|
# cursor=self.button_cursor
|
||||||
)
|
#)
|
||||||
self.show_options_button.config(image=self.show_options_picture)
|
#self.show_options_button.config(image=self.show_options_picture)
|
||||||
self.show_options_button.grid(sticky=tk.W, row=2, column=0)
|
#self.show_options_button.grid(sticky=tk.W, row=2, column=0)
|
||||||
|
|
||||||
def _get_chosen_option(self, option_type, option_widget):
|
def _get_chosen_option(self, option_type, option_widget):
|
||||||
if option_type.value == float:
|
if option_type.value == float:
|
||||||
|
@ -337,23 +402,24 @@ class StreamFrame(object):
|
||||||
chosen_options.append(self._get_chosen_option(option_type, option_widget))
|
chosen_options.append(self._get_chosen_option(option_type, option_widget))
|
||||||
return chosen_options
|
return chosen_options
|
||||||
|
|
||||||
def _toggle_show_options(self):
|
#def _toggle_show_options(self):
|
||||||
if self.options_frame.winfo_ismapped():
|
# if self.options_frame.winfo_ismapped():
|
||||||
self.show_options_button.config(image=self.show_options_picture)
|
# self.show_options_button.config(image=self.show_options_picture)
|
||||||
self.options_frame.grid_forget()
|
# self.options_frame.grid_forget()
|
||||||
else:
|
# else:
|
||||||
self.show_options_button.config(image=self.hide_options_picture)
|
# self.show_options_button.config(image=self.hide_options_picture)
|
||||||
self.options_frame.grid(sticky=tk.W + tk.E, row=3)
|
# self.options_frame.grid(sticky=tk.W + tk.E, row=3)
|
||||||
|
|
||||||
def show_progress(self, total_bytes, bytes_left_to_download, points_paid,
|
def show_progress(self, total_bytes, bytes_left_to_download, points_paid,
|
||||||
points_remaining):
|
points_remaining):
|
||||||
if self.bytes_downloaded_label is None:
|
if self.bytes_downloaded_label is None:
|
||||||
self.remove_download_buttons()
|
self.remove_download_buttons()
|
||||||
self.button_frame.destroy()
|
self.button_frame.destroy()
|
||||||
|
self.estimated_cost_frame.destroy()
|
||||||
for option, frame in self.option_frames:
|
for option, frame in self.option_frames:
|
||||||
frame.destroy()
|
frame.destroy()
|
||||||
self.options_frame.destroy()
|
self.options_frame.destroy()
|
||||||
self.show_options_button.destroy()
|
#self.show_options_button.destroy()
|
||||||
|
|
||||||
self.progress_frame = ttk.Frame(self.outer_button_frame, style="F.TFrame")
|
self.progress_frame = ttk.Frame(self.outer_button_frame, style="F.TFrame")
|
||||||
self.progress_frame.grid(row=0, column=0, sticky=tk.W, pady=(0, 8))
|
self.progress_frame.grid(row=0, column=0, sticky=tk.W, pady=(0, 8))
|
||||||
|
@ -365,7 +431,7 @@ class StreamFrame(object):
|
||||||
self.bytes_downloaded_label.grid(row=0, column=0)
|
self.bytes_downloaded_label.grid(row=0, column=0)
|
||||||
|
|
||||||
self.cost_frame = ttk.Frame(self.outer_button_frame, style="F.TFrame")
|
self.cost_frame = ttk.Frame(self.outer_button_frame, style="F.TFrame")
|
||||||
self.cost_frame.grid(row=1, column=0, sticky=tk.W, pady=(0, 7))
|
self.cost_frame.grid(row=1, column=0, sticky=tk.W, pady=(0, 4))
|
||||||
|
|
||||||
self.cost_label = ttk.Label(
|
self.cost_label = ttk.Label(
|
||||||
self.cost_frame,
|
self.cost_frame,
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -8,7 +8,7 @@ from setuptools import setup, find_packages
|
||||||
setup(name='lbrynet',
|
setup(name='lbrynet',
|
||||||
version='0.0.4',
|
version='0.0.4',
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
install_requires=['pycrypto', 'twisted', 'miniupnpc', 'yapsy', 'seccure', 'python-bitcoinrpc==0.1', 'txJSON-RPC', 'requests', 'unqlite', 'leveldb'],
|
install_requires=['pycrypto', 'twisted', 'miniupnpc', 'yapsy', 'seccure', 'python-bitcoinrpc==0.1', 'txJSON-RPC', 'requests>=2.4.2', 'unqlite', 'leveldb'],
|
||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'lbrynet-console = lbrynet.lbrynet_console.LBRYConsole:launch_lbry_console',
|
'lbrynet-console = lbrynet.lbrynet_console.LBRYConsole:launch_lbry_console',
|
||||||
|
|
Loading…
Reference in a new issue