Compare commits

..

4 commits

Author SHA1 Message Date
Victor Shyba
a357cb6b26 unused import 2019-07-12 06:59:05 -03:00
Victor Shyba
5ba2190ca7 remove sleep from test server sessions 2019-07-12 06:58:43 -03:00
Victor Shyba
0bd3c3f503 refactor protocol handler + misc 2019-07-12 06:38:23 -03:00
Jack Robison
489da88e79 reconnect torba ClientSession on fatal socket errors 2019-07-12 00:29:17 -03:00
588 changed files with 50310 additions and 45242 deletions

View file

@ -1,206 +0,0 @@
name: ci
on: ["push", "pull_request", "workflow_dispatch"]
jobs:
lint:
name: lint
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: extract pip cache
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('setup.py') }}
restore-keys: ${{ runner.os }}-pip-
- run: pip install --user --upgrade pip wheel
- run: pip install -e .[lint]
- run: make lint
tests-unit:
name: "tests / unit"
strategy:
matrix:
os:
- ubuntu-20.04
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: set pip cache dir
shell: bash
run: echo "PIP_CACHE_DIR=$(pip cache dir)" >> $GITHUB_ENV
- name: extract pip cache
uses: actions/cache@v3
with:
path: ${{ env.PIP_CACHE_DIR }}
key: ${{ runner.os }}-pip-${{ hashFiles('setup.py') }}
restore-keys: ${{ runner.os }}-pip-
- id: os-name
uses: ASzc/change-string-case-action@v5
with:
string: ${{ runner.os }}
- run: python -m pip install --user --upgrade pip wheel
- if: startsWith(runner.os, 'linux')
run: pip install -e .[test]
- if: startsWith(runner.os, 'linux')
env:
HOME: /tmp
run: make test-unit-coverage
- if: startsWith(runner.os, 'linux') != true
run: pip install -e .[test]
- if: startsWith(runner.os, 'linux') != true
env:
HOME: /tmp
run: coverage run --source=lbry -m unittest tests/unit/test_conf.py
- name: submit coverage report
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_FLAG_NAME: tests-unit-${{ steps.os-name.outputs.lowercase }}
COVERALLS_PARALLEL: true
run: |
pip install coveralls
coveralls --service=github
tests-integration:
name: "tests / integration"
runs-on: ubuntu-20.04
strategy:
matrix:
test:
- datanetwork
- blockchain
- claims
- takeovers
- transactions
- other
steps:
- name: Configure sysctl limits
run: |
sudo swapoff -a
sudo sysctl -w vm.swappiness=1
sudo sysctl -w fs.file-max=262144
sudo sysctl -w vm.max_map_count=262144
- name: Runs Elasticsearch
uses: elastic/elastic-github-actions/elasticsearch@master
with:
stack-version: 7.12.1
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- if: matrix.test == 'other'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends ffmpeg
- name: extract pip cache
uses: actions/cache@v3
with:
path: ./.tox
key: tox-integration-${{ matrix.test }}-${{ hashFiles('setup.py') }}
restore-keys: txo-integration-${{ matrix.test }}-
- run: pip install tox coverage coveralls
- if: matrix.test == 'claims'
run: rm -rf .tox
- run: tox -e ${{ matrix.test }}
- name: submit coverage report
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_FLAG_NAME: tests-integration-${{ matrix.test }}
COVERALLS_PARALLEL: true
run: |
coverage combine tests
coveralls --service=github
coverage:
needs: ["tests-unit", "tests-integration"]
runs-on: ubuntu-20.04
steps:
- name: finalize coverage report submission
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
pip install coveralls
coveralls --service=github --finish
build:
needs: ["lint", "tests-unit", "tests-integration"]
name: "build / binary"
strategy:
matrix:
os:
- ubuntu-20.04
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- id: os-name
uses: ASzc/change-string-case-action@v5
with:
string: ${{ runner.os }}
- name: set pip cache dir
shell: bash
run: echo "PIP_CACHE_DIR=$(pip cache dir)" >> $GITHUB_ENV
- name: extract pip cache
uses: actions/cache@v3
with:
path: ${{ env.PIP_CACHE_DIR }}
key: ${{ runner.os }}-pip-${{ hashFiles('setup.py') }}
restore-keys: ${{ runner.os }}-pip-
- run: pip install pyinstaller==4.6
- run: pip install -e .
- if: startsWith(github.ref, 'refs/tags/v')
run: python docker/set_build.py
- if: startsWith(runner.os, 'linux') || startsWith(runner.os, 'mac')
name: Build & Run (Unix)
run: |
pyinstaller --onefile --name lbrynet lbry/extras/cli.py
dist/lbrynet --version
- if: startsWith(runner.os, 'windows')
name: Build & Run (Windows)
run: |
pip install pywin32==301
pyinstaller --additional-hooks-dir=scripts/. --icon=icons/lbry256.ico --onefile --name lbrynet lbry/extras/cli.py
dist/lbrynet.exe --version
- uses: actions/upload-artifact@v3
with:
name: lbrynet-${{ steps.os-name.outputs.lowercase }}
path: dist/
release:
name: "release"
if: startsWith(github.ref, 'refs/tags/v')
needs: ["build"]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v1
- uses: actions/download-artifact@v2
- name: upload binaries
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_API_TOKEN }}
run: |
pip install githubrelease
chmod +x lbrynet-macos/lbrynet
chmod +x lbrynet-linux/lbrynet
zip --junk-paths lbrynet-mac.zip lbrynet-macos/lbrynet
zip --junk-paths lbrynet-linux.zip lbrynet-linux/lbrynet
zip --junk-paths lbrynet-windows.zip lbrynet-windows/lbrynet.exe
ls -lh
githubrelease release lbryio/lbry-sdk info ${GITHUB_REF#refs/tags/}
githubrelease asset lbryio/lbry-sdk upload ${GITHUB_REF#refs/tags/} \
lbrynet-mac.zip lbrynet-linux.zip lbrynet-windows.zip
githubrelease release lbryio/lbry-sdk publish ${GITHUB_REF#refs/tags/}

View file

@ -1,22 +0,0 @@
name: slack
on:
release:
types: [published]
jobs:
release:
name: "slack notification"
runs-on: ubuntu-20.04
steps:
- uses: LoveToKnow/slackify-markdown-action@v1.0.0
id: markdown
with:
text: "There is a new SDK release: ${{github.event.release.html_url}}\n${{ github.event.release.body }}"
- uses: slackapi/slack-github-action@v1.14.0
env:
CHANGELOG: '<!channel> ${{ steps.markdown.outputs.text }}'
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_RELEASE_BOT_WEBHOOK }}
with:
payload: '{"type": "mrkdwn", "text": ${{ toJSON(env.CHANGELOG) }} }'

20
.gitignore vendored
View file

@ -1,22 +1,2 @@
/.idea
/.DS_Store
/build
/dist
/.tox
/.coverage*
/lbry-venv
/venv
/lbry/blockchain
lbry.egg-info
__pycache__
_trial_temp/
trending*.log
/tests/integration/claims/files
/tests/.coverage.*
/lbry/wallet/bin
/.vscode
/.gitignore

144
.travis.yml Normal file
View file

@ -0,0 +1,144 @@
sudo: required
dist: xenial
language: python
python: "3.7"
jobs:
include:
- stage: code quality
name: "pylint & mypy"
install:
- make install
script: make lint
- stage: test
name: "LBRY Unit Tests"
install:
- make install
script:
- cd lbry && HOME=/tmp coverage run -p --source=lbry -m unittest discover -vv tests.unit
after_success:
- coverage combine lbry/
- bash <(curl -s https://codecov.io/bash)
- name: "LBRY Integration Tests"
install:
- pip install coverage tox-travis
script: cd lbry && tox
after_success:
- coverage combine lbry
- bash <(curl -s https://codecov.io/bash)
- &torba-tests
name: "Torba Unit Tests"
env: TESTTYPE=unit
install:
- pip install coverage tox-travis
script: cd torba && tox
after_success:
- coverage combine torba/tests
- bash <(curl -s https://codecov.io/bash)
- <<: *torba-tests
name: "Torba Integration Tests"
env: TESTTYPE=integration
- name: "Run Examples"
install:
- make install
script:
- cd lbry && HOME=/tmp coverage run -p --source=lbry scripts/generate_json_api.py
after_success:
- coverage combine lbry
- bash <(curl -s https://codecov.io/bash)
- &build
stage: build
name: "Linux"
env: OS=linux
install:
- pip install pyinstaller awscli
- cd torba && pip install -e . && cd ..
- cd lbry
- python scripts/set_build.py
- pip install -e .
script:
- pyinstaller -F -n lbrynet lbry/extras/cli.py
- cd dist
- chmod +x lbrynet
- zip -j lbrynet-${OS}.zip lbrynet
- shasum -a 256 -b lbrynet-${OS}.zip
- ./lbrynet --version
after_success:
- aws configure set aws_access_key_id $ARTIFACTS_KEY
- aws configure set aws_secret_access_key $ARTIFACTS_SECRET
- aws configure set region us-east-1
- export S3_PATH="daemon/build-${TRAVIS_BUILD_NUMBER}_commit-${TRAVIS_COMMIT:0:7}_branch-${TRAVIS_BRANCH}$([ ! -z ${TRAVIS_TAG} ] && echo _tag-${TRAVIS_TAG})"
- aws s3 cp lbrynet-${OS}.zip s3://build.lbry.io/${S3_PATH}/lbrynet-${OS}.zip
deploy:
provider: releases
api_key: $GITHUB_OAUTH_TOKEN
file: lbrynet-${OS}.zip
skip_cleanup: true
overwrite: true
draft: true
on:
tags: true
- <<: *build
name: "Mac"
os: osx
osx_image: xcode8.3
language: shell
env: OS=mac
before_install:
- brew upgrade python || true
- pip3 install --user --upgrade pip virtualenv
- /Users/travis/Library/Python/3.7/bin/virtualenv $HOME/venv
- source $HOME/venv/bin/activate
before_cache:
- brew cleanup
- <<: *build
name: "Windows"
os: windows
language: shell
env:
- OS=windows
- PATH=/c/Python37:/c/Python37/Scripts:/C/Windows/System32/downlevel:$PATH
before_install:
- choco install python --x86
- python -m pip install --upgrade pip
- pip install pywin32
script:
- pyinstaller --additional-hooks-dir=scripts/. --icon=icons/lbry256.ico -F -n lbrynet lbry/extras/cli.py
- cd dist
- 7z a -tzip lbrynet-windows.zip lbrynet.exe
- sha256sum -b lbrynet-windows.zip
- ./lbrynet.exe --version
- if: tag IS present
stage: build
name: "Wallet Server Docker Image - Tagged Release"
script:
- set -e
- echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
- travis_retry docker build -t lbry/wallet-server:$TRAVIS_TAG -f lbry/scripts/Dockerfile.wallet_server .
- docker push lbry/wallet-server:$TRAVIS_TAG
- if: tag IS blank AND branch = master AND NOT type IN (pull_request)
stage: build
name: "Wallet Server Docker Image - Master"
script:
- set -e
- echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
- travis_retry docker build -t lbry/wallet-server:master -f lbry/scripts/Dockerfile.wallet_server .
- docker push lbry/wallet-server:master
cache:
directories:
- $HOME/venv
- $HOME/.cache/pip
- $HOME/Library/Caches/pip
- $HOME/Library/Caches/Homebrew
- $TRAVIS_BUILD_DIR/.tox

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
# Installing LBRY
If only the JSON-RPC API server is needed, the recommended way to install LBRY is to use a pre-built binary. We provide binaries for all major operating systems. See the [README](README.md)!
If only the JSON-RPC API server is needed, the recommended way to install LBRY is to use a pre-built binary. We provide binaries for all major operating systems. See the [README](README.md).
These instructions are for installing LBRY from source, which is recommended if you are interested in doing development work or LBRY is not available on your operating system (godspeed, TempleOS users).
@ -9,48 +9,36 @@ Here's a video walkthrough of this setup, which is itself hosted by the LBRY net
## Prerequisites
Running `lbrynet` from source requires Python 3.7. Get the installer for your OS [here](https://www.python.org/downloads/release/python-370/).
Running `lbrynet` from source requires Python 3.7 or higher. Get the installer for your OS [here](https://www.python.org/downloads/release/python-370/)
After installing Python 3.7, you'll need to install some additional libraries depending on your operating system.
Because of [issue #2769](https://github.com/lbryio/lbry-sdk/issues/2769)
at the moment the `lbrynet` daemon will only work correctly with Python 3.7.
If Python 3.8+ is used, the daemon will start but the RPC server
may not accept messages, returning the following:
```
Could not connect to daemon. Are you sure it's running?
```
After installing python 3, you'll need to install some additional libraries depending on your operating system.
### macOS
macOS users will need to install [xcode command line tools](https://developer.xamarin.com/guides/testcloud/calabash/configuring/osx/install-xcode-command-line-tools/) and [homebrew](http://brew.sh/).
These environment variables also need to be set:
```
PYTHONUNBUFFERED=1
EVENT_NOKQUEUE=1
```
These environment variables also need to be set
1. PYTHONUNBUFFERED=1
2. EVENT_NOKQUEUE=1
Remaining dependencies can then be installed by running:
```
brew install python protobuf
```
Assistance installing Python3: https://docs.python-guide.org/starting/install3/osx/.
Assistance installing Python3: https://docs.python-guide.org/starting/install3/osx/
### Linux
On Ubuntu (we recommend 18.04 or 20.04), install the following:
On Ubuntu (16.04 minimum, we recommend 18.04), install the following:
```
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install build-essential python3.7 python3.7-dev git python3.7-venv libssl-dev python-protobuf
```
The [deadsnakes PPA](https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa) provides Python 3.7
for those Ubuntu distributions that no longer have it in their
official repositories.
On Raspbian, you will also need to install `python-pyparsing`.
If you're running another Linux distro, install the equivalent of the above packages for your system.
@ -59,119 +47,65 @@ If you're running another Linux distro, install the equivalent of the above pack
### Linux/Mac
Clone the repository:
```bash
git clone https://github.com/lbryio/lbry-sdk.git
cd lbry-sdk
```
To install on Linux/Mac:
Create a Python virtual environment for lbry-sdk:
```bash
python3.7 -m venv lbry-venv
```
```
Clone the repository:
$ git clone https://github.com/lbryio/lbry-sdk.git
$ cd lbry-sdk
Activate virtual environment:
```bash
source lbry-venv/bin/activate
```
Create a Python virtual environment for lbry-sdk:
$ python3.7 -m venv lbry-venv
Make sure you're on Python 3.7+ as default in the virtual environment:
```bash
python --version
```
Activating lbry-sdk virtual environment:
$ source lbry-venv/bin/activate
Install packages:
```bash
make install
```
Make sure you're on Python 3.7+ (as the default Python in virtual environment):
$ python --version
If you are on Linux and using PyCharm, generates initial configs:
```bash
make idea
```
Install packages:
$ make install
To verify your installation, `which lbrynet` should return a path inside
of the `lbry-venv` folder.
```bash
(lbry-venv) $ which lbrynet
/opt/lbry-sdk/lbry-venv/bin/lbrynet
```
If you are on Linux and using PyCharm, generates initial configs:
$ make idea
```
To exit the virtual environment simply use the command `deactivate`.
To verify your installation, `which lbrynet` should return a path inside of the `lbry-venv` folder created by the `python3.7 -m venv lbry-venv` command.
### Windows
Clone the repository:
```bash
git clone https://github.com/lbryio/lbry-sdk.git
cd lbry-sdk
```
To install on Windows:
Create a Python virtual environment for lbry-sdk:
```bash
python -m venv lbry-venv
```
```
Clone the repository:
> git clone https://github.com/lbryio/lbry-sdk.git
> cd lbry-sdk
Activate virtual environment:
```bash
lbry-venv\Scripts\activate
```
Create a Python virtual environment for lbry-sdk:
> python -m venv lbry-venv
Install packages:
```bash
pip install -e .
```
Activating lbry-sdk virtual environment:
> lbry-venv\Scripts\activate
Install packages:
> cd torba
> pip install -e .
> cd ../lbry
> pip install -e .
```
## Run the tests
### Elasticsearch
For running integration tests, Elasticsearch is required to be available at localhost:9200/
To run the unit tests from the repo directory:
The easiest way to start it is using docker with:
```bash
make elastic-docker
```
Alternative installation methods are available [at Elasticsearch website](https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html).
To run the unit and integration tests from the repo directory:
```
python -m unittest discover tests.unit
python -m unittest discover tests.integration
```
```
python -m unittest discover -s lbry tests.unit
```
## Usage
To start the API server:
```
lbrynet start
```
`lbrynet start`
Whenever the code inside [lbry-sdk/lbry](./lbry)
is modified we should run `make install` to recompile the `lbrynet`
executable with the newest code.
## Development
When developing, remember to enter the environment,
and if you wish start the server interactively.
```bash
$ source lbry-venv/bin/activate
(lbry-venv) $ python lbry/extras/cli.py start
```
Parameters can be passed in the same way.
```bash
(lbry-venv) $ python lbry/extras/cli.py wallet balance
```
If a Python debugger (`pdb` or `ipdb`) is installed we can also start it
in this way, set up break points, and step through the code.
```bash
(lbry-venv) $ pip install ipdb
(lbry-venv) $ ipdb lbry/extras/cli.py
```
Happy hacking!

View file

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2015-2022 LBRY Inc
Copyright (c) 2015-2019 LBRY Inc
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish,

View file

@ -1,26 +1,14 @@
.PHONY: install tools lint test test-unit test-unit-coverage test-integration idea
install:
pip install -e .
cd torba && pip install -e .
cd lbry && pip install -e .
pip install mypy==0.701
pip install coverage astroid pylint
lint:
pylint --rcfile=setup.cfg lbry
#mypy --ignore-missing-imports lbry
test: test-unit test-integration
test-unit:
python -m unittest discover tests.unit
test-unit-coverage:
coverage run --source=lbry -m unittest discover -vv tests.unit
test-integration:
tox
cd lbry && pylint lbry
cd torba && pylint --rcfile=setup.cfg torba
cd torba && mypy --ignore-missing-imports torba
idea:
mkdir -p .idea
cp -r scripts/idea/* .idea
elastic-docker:
docker run -d -v lbryhub:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 -e"ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.12.1
cp -r lbry/scripts/idea/* .idea

View file

@ -1,15 +1,15 @@
# <img src="https://raw.githubusercontent.com/lbryio/lbry-sdk/master/lbry.png" alt="LBRY" width="48" height="36" /> LBRY SDK [![build](https://github.com/lbryio/lbry-sdk/actions/workflows/main.yml/badge.svg)](https://github.com/lbryio/lbry-sdk/actions/workflows/main.yml) [![coverage](https://coveralls.io/repos/github/lbryio/lbry-sdk/badge.svg)](https://coveralls.io/github/lbryio/lbry-sdk)
# <img src="https://raw.githubusercontent.com/lbryio/lbry-sdk/master/lbry/lbry.png" alt="LBRY" width="48" height="36" /> LBRY SDK [![Build Status](https://travis-ci.org/lbryio/lbry-sdk.svg?branch=master)](https://travis-ci.org/lbryio/lbry-sdk) [![Test Coverage](https://codecov.io/gh/lbryio/lbry-sdk/branch/master/graph/badge.svg)](https://codecov.io/gh/lbryio/lbry-sdk)
LBRY is a decentralized peer-to-peer protocol for publishing and accessing digital content. It utilizes the [LBRY blockchain](https://github.com/lbryio/lbrycrd) as a global namespace and database of digital content. Blockchain entries contain searchable content metadata, identities, rights and access rules. LBRY also provides a data network that consists of peers (seeders) uploading and downloading data from other peers, possibly in exchange for payments, as well as a distributed hash table used by peers to discover other peers.
LBRY SDK for Python is currently the most fully featured implementation of the LBRY Network protocols and includes many useful components and tools for building decentralized applications. Primary features and components include:
LBRY SDK for Python is currently the most full featured implementation of the LBRY Network protocols and includes many useful components and tools for building decentralized applications. Primary features and components:
* Built on Python 3.7 and `asyncio`.
* Kademlia DHT (Distributed Hash Table) implementation for finding peers to download from and announcing to peers what we have to host ([lbry.dht](https://github.com/lbryio/lbry-sdk/tree/master/lbry/dht)).
* Blob exchange protocol for transferring encrypted blobs of content and negotiating payments ([lbry.blob_exchange](https://github.com/lbryio/lbry-sdk/tree/master/lbry/blob_exchange)).
* Protobuf schema for encoding and decoding metadata stored on the blockchain ([lbry.schema](https://github.com/lbryio/lbry-sdk/tree/master/lbry/schema)).
* Wallet implementation for the LBRY blockchain ([lbry.wallet](https://github.com/lbryio/lbry-sdk/tree/master/lbry/wallet)).
* Daemon with a JSON-RPC API to ease building end user applications in any language and for automating various tasks ([lbry.extras.daemon](https://github.com/lbryio/lbry-sdk/tree/master/lbry/extras/daemon)).
* Built on Python 3.7+ and `asyncio`.
* Kademlia DHT (Distributed Hash Table) implementation for finding peers to download from and announcing to peers what we have to host ([lbry.dht](https://github.com/lbryio/lbry-sdk/tree/master/lbry/lbry/dht)).
* Blob exchange protocol for transferring encrypted blobs of content and negotiating payments ([lbry.blob_exchange](https://github.com/lbryio/lbry-sdk/tree/master/lbry/lbry/blob_exchange)).
* Protobuf schema for encoding and decoding metadata stored on the blockchain ([lbry.schema](https://github.com/lbryio/lbry-sdk/tree/master/lbry/lbry/schema)).
* Wallet implementation for the LBRY blockchain ([lbry.wallet](https://github.com/lbryio/lbry-sdk/tree/master/lbry/lbry/wallet)).
* Daemon with a JSON-RPC API to ease building end user applications in any language and for automating various tasks ([lbry.extras.daemon](https://github.com/lbryio/lbry-sdk/tree/master/lbry/lbry/extras/daemon)).
## Installation
@ -41,7 +41,7 @@ This project is MIT licensed. For the full license, see [LICENSE](LICENSE).
## Security
We take security seriously. Please contact security@lbry.com regarding any security issues. [Our PGP key is here](https://lbry.com/faq/pgp-key) if you need it.
We take security seriously. Please contact security@lbry.com regarding any security issues. [Our GPG key is here](https://lbry.com/faq/gpg-key) if you need it.
## Contact
@ -53,4 +53,4 @@ The documentation for the API can be found [here](https://lbry.tech/api/sdk).
Daemon defaults, ports, and other settings are documented [here](https://lbry.tech/resources/daemon-settings).
Settings can be configured using a daemon-settings.yml file. An example can be found [here](https://github.com/lbryio/lbry-sdk/blob/master/example_daemon_settings.yml).
Settings can be configured using a daemon-settings.yml file. An example can be found [here](https://github.com/lbryio/lbry-sdk/blob/master/lbry/example_daemon_settings.yml).

View file

@ -1,9 +0,0 @@
# Security Policy
## Supported Versions
While we are not at v1.0 yet, only the latest release will be supported.
## Reporting a Vulnerability
See https://lbry.com/faq/security

9
dart/packages/lbry/.gitignore vendored Normal file
View file

@ -0,0 +1,9 @@
# Files and directories created by pub
.dart_tool/
.packages
# Conventional directory for build outputs
build/
# Directory created by dartdoc
doc/api/

View file

@ -0,0 +1,3 @@
## 1.0.0
- Initial version, created by Stagehand

View file

@ -0,0 +1 @@
LBRY SDK in Dart.

View file

@ -0,0 +1,14 @@
# Defines a default set of lint rules enforced for
# projects at Google. For details and rationale,
# see https://github.com/dart-lang/pedantic#enabled-lints.
include: package:pedantic/analysis_options.yaml
# For lint rules and documentation, see http://dart-lang.github.io/linter/lints.
# Uncomment to specify additional rules.
# linter:
# rules:
# - camel_case_types
analyzer:
# exclude:
# - path/to/excluded/files/**

View file

@ -0,0 +1,5 @@
import 'package:lbry/src/load_generator.dart' as load;
main(List<String> arguments) {
load.cli();
}

View file

@ -0,0 +1 @@
export 'src/load_generator.dart' show LoadGenerator, LoadDataPoint;

View file

@ -0,0 +1,133 @@
import 'dart:async';
import 'dart:io';
import 'dart:convert';
class LoadRequest {
final String host;
final int port;
final Map payload;
Completer completer;
Stopwatch timer;
bool get isDone => completer.isCompleted;
int get elapsed => timer.elapsedMilliseconds;
LoadRequest(this.host, this.port, this.payload);
LoadRequest start() {
completer = Completer();
timer = Stopwatch()..start();
completer.future.whenComplete(() => timer.stop());
try {
Socket.connect(this.host, this.port).then((socket) {
utf8.decoder.bind(socket).listen((r) {
if (r.contains('"jsonrpc": "2.0", "result": ')) {
socket.close();
completer.complete();
}
}, onError: (e) {print(e); completer.complete();});
try {
socket.write(jsonEncode(payload) + '\n');
} catch (exception, stackTrace) {
print(exception);
print(stackTrace);
completer.complete();
}
}, onError: (e) {print(e);completer.complete();});
} catch (exception, stackTrace) {
print(exception);
print(stackTrace);
completer.complete();
}
return this;
}
}
typedef bool LoadTestCallback(LoadGenerator load_generator, LoadDataPoint stats);
class LoadGenerator {
int load = 1;
Timer _timer;
String host;
int port;
Map query;
LoadTestCallback cb;
LoadGenerator(this.host, this.port, this.query, this.cb);
start() {
var previous = spawn_requests();
var backlog = <LoadRequest>[];
_timer = Timer.periodic(Duration(seconds: 1), (t) {
var stat = LoadDataPoint();
backlog.removeWhere((r) {
if (r.isDone) stat.addCatchup(r);
return r.isDone;
});
for (var f in previous) {
if (f.isDone) {
stat.addSuccess(f);
} else {
backlog.add(f);
}
}
stat.backlog = backlog.length;
stat.load = load;
if (cb(this, stat)) {
previous = spawn_requests();
} else {
t.cancel();
}
});
}
stop() {
_timer.cancel();
}
List<LoadRequest> spawn_requests() {
var requests = <LoadRequest>[];
for (var _ in Iterable.generate(load)) {
requests.add(LoadRequest(this.host, this.port, this.query).start());
}
return requests;
}
}
class LoadDataPoint {
final DateTime time = new DateTime.now();
int success = 0;
int errored = 0;
int backlog = 0;
int catchup = 0;
int _success_total = 0;
int _catchup_total = 0;
int load = 0;
int get avg_success => _success_total > 0 ? (_success_total/success).round() : 0;
int get avg_catchup => _catchup_total > 0 ? (_catchup_total/catchup).round() : 0;
addSuccess(LoadRequest r) {
success++; _success_total += r.elapsed;
}
addCatchup(LoadRequest r) {
catchup++; _catchup_total += r.elapsed;
}
}
cli() {
var runs = 1;
LoadGenerator('localhost', 50001, {
'id': 1,
'method': 'blockchain.claimtrie.resolve',
'params': ['one', 'two', 'three']
}, (t, stats) {
print("run ${runs}: ${stats}");
t.load = (runs < 4 ? t.load*2 : t.load/2).round();
return runs++ < 10;
}).start();
}

View file

@ -0,0 +1,2 @@
build:
protoc --dart_out=v2 -I ../../../../../../../types/v2/proto/ ../../../../../../../types/v2/proto/*.proto

View file

@ -0,0 +1,625 @@
///
// Generated code. Do not modify.
// source: claim.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
import 'dart:core' as $core show bool, Deprecated, double, int, List, Map, override, pragma, String;
import 'package:fixnum/fixnum.dart';
import 'package:protobuf/protobuf.dart' as $pb;
import 'claim.pbenum.dart';
export 'claim.pbenum.dart';
enum Claim_Type {
stream,
channel,
collection,
repost,
notSet
}
class Claim extends $pb.GeneratedMessage {
static const $core.Map<$core.int, Claim_Type> _Claim_TypeByTag = {
1 : Claim_Type.stream,
2 : Claim_Type.channel,
3 : Claim_Type.collection,
4 : Claim_Type.repost,
0 : Claim_Type.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Claim', package: const $pb.PackageName('pb'))
..oo(0, [1, 2, 3, 4])
..a<Stream>(1, 'stream', $pb.PbFieldType.OM, Stream.getDefault, Stream.create)
..a<Channel>(2, 'channel', $pb.PbFieldType.OM, Channel.getDefault, Channel.create)
..a<ClaimList>(3, 'collection', $pb.PbFieldType.OM, ClaimList.getDefault, ClaimList.create)
..a<ClaimReference>(4, 'repost', $pb.PbFieldType.OM, ClaimReference.getDefault, ClaimReference.create)
..aOS(8, 'title')
..aOS(9, 'description')
..a<Source>(10, 'thumbnail', $pb.PbFieldType.OM, Source.getDefault, Source.create)
..pPS(11, 'tags')
..pc<Language>(12, 'languages', $pb.PbFieldType.PM,Language.create)
..pc<Location>(13, 'locations', $pb.PbFieldType.PM,Location.create)
..hasRequiredFields = false
;
Claim._() : super();
factory Claim() => create();
factory Claim.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Claim.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Claim clone() => Claim()..mergeFromMessage(this);
Claim copyWith(void Function(Claim) updates) => super.copyWith((message) => updates(message as Claim));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Claim create() => Claim._();
Claim createEmptyInstance() => create();
static $pb.PbList<Claim> createRepeated() => $pb.PbList<Claim>();
static Claim getDefault() => _defaultInstance ??= create()..freeze();
static Claim _defaultInstance;
Claim_Type whichType() => _Claim_TypeByTag[$_whichOneof(0)];
void clearType() => clearField($_whichOneof(0));
Stream get stream => $_getN(0);
set stream(Stream v) { setField(1, v); }
$core.bool hasStream() => $_has(0);
void clearStream() => clearField(1);
Channel get channel => $_getN(1);
set channel(Channel v) { setField(2, v); }
$core.bool hasChannel() => $_has(1);
void clearChannel() => clearField(2);
ClaimList get collection => $_getN(2);
set collection(ClaimList v) { setField(3, v); }
$core.bool hasCollection() => $_has(2);
void clearCollection() => clearField(3);
ClaimReference get repost => $_getN(3);
set repost(ClaimReference v) { setField(4, v); }
$core.bool hasRepost() => $_has(3);
void clearRepost() => clearField(4);
$core.String get title => $_getS(4, '');
set title($core.String v) { $_setString(4, v); }
$core.bool hasTitle() => $_has(4);
void clearTitle() => clearField(8);
$core.String get description => $_getS(5, '');
set description($core.String v) { $_setString(5, v); }
$core.bool hasDescription() => $_has(5);
void clearDescription() => clearField(9);
Source get thumbnail => $_getN(6);
set thumbnail(Source v) { setField(10, v); }
$core.bool hasThumbnail() => $_has(6);
void clearThumbnail() => clearField(10);
$core.List<$core.String> get tags => $_getList(7);
$core.List<Language> get languages => $_getList(8);
$core.List<Location> get locations => $_getList(9);
}
enum Stream_Type {
image,
video,
audio,
software,
notSet
}
class Stream extends $pb.GeneratedMessage {
static const $core.Map<$core.int, Stream_Type> _Stream_TypeByTag = {
10 : Stream_Type.image,
11 : Stream_Type.video,
12 : Stream_Type.audio,
13 : Stream_Type.software,
0 : Stream_Type.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Stream', package: const $pb.PackageName('pb'))
..oo(0, [10, 11, 12, 13])
..a<Source>(1, 'source', $pb.PbFieldType.OM, Source.getDefault, Source.create)
..aOS(2, 'author')
..aOS(3, 'license')
..aOS(4, 'licenseUrl')
..aInt64(5, 'releaseTime')
..a<Fee>(6, 'fee', $pb.PbFieldType.OM, Fee.getDefault, Fee.create)
..a<Image>(10, 'image', $pb.PbFieldType.OM, Image.getDefault, Image.create)
..a<Video>(11, 'video', $pb.PbFieldType.OM, Video.getDefault, Video.create)
..a<Audio>(12, 'audio', $pb.PbFieldType.OM, Audio.getDefault, Audio.create)
..a<Software>(13, 'software', $pb.PbFieldType.OM, Software.getDefault, Software.create)
..hasRequiredFields = false
;
Stream._() : super();
factory Stream() => create();
factory Stream.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Stream.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Stream clone() => Stream()..mergeFromMessage(this);
Stream copyWith(void Function(Stream) updates) => super.copyWith((message) => updates(message as Stream));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Stream create() => Stream._();
Stream createEmptyInstance() => create();
static $pb.PbList<Stream> createRepeated() => $pb.PbList<Stream>();
static Stream getDefault() => _defaultInstance ??= create()..freeze();
static Stream _defaultInstance;
Stream_Type whichType() => _Stream_TypeByTag[$_whichOneof(0)];
void clearType() => clearField($_whichOneof(0));
Source get source => $_getN(0);
set source(Source v) { setField(1, v); }
$core.bool hasSource() => $_has(0);
void clearSource() => clearField(1);
$core.String get author => $_getS(1, '');
set author($core.String v) { $_setString(1, v); }
$core.bool hasAuthor() => $_has(1);
void clearAuthor() => clearField(2);
$core.String get license => $_getS(2, '');
set license($core.String v) { $_setString(2, v); }
$core.bool hasLicense() => $_has(2);
void clearLicense() => clearField(3);
$core.String get licenseUrl => $_getS(3, '');
set licenseUrl($core.String v) { $_setString(3, v); }
$core.bool hasLicenseUrl() => $_has(3);
void clearLicenseUrl() => clearField(4);
Int64 get releaseTime => $_getI64(4);
set releaseTime(Int64 v) { $_setInt64(4, v); }
$core.bool hasReleaseTime() => $_has(4);
void clearReleaseTime() => clearField(5);
Fee get fee => $_getN(5);
set fee(Fee v) { setField(6, v); }
$core.bool hasFee() => $_has(5);
void clearFee() => clearField(6);
Image get image => $_getN(6);
set image(Image v) { setField(10, v); }
$core.bool hasImage() => $_has(6);
void clearImage() => clearField(10);
Video get video => $_getN(7);
set video(Video v) { setField(11, v); }
$core.bool hasVideo() => $_has(7);
void clearVideo() => clearField(11);
Audio get audio => $_getN(8);
set audio(Audio v) { setField(12, v); }
$core.bool hasAudio() => $_has(8);
void clearAudio() => clearField(12);
Software get software => $_getN(9);
set software(Software v) { setField(13, v); }
$core.bool hasSoftware() => $_has(9);
void clearSoftware() => clearField(13);
}
class Channel extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Channel', package: const $pb.PackageName('pb'))
..a<$core.List<$core.int>>(1, 'publicKey', $pb.PbFieldType.OY)
..aOS(2, 'email')
..aOS(3, 'websiteUrl')
..a<Source>(4, 'cover', $pb.PbFieldType.OM, Source.getDefault, Source.create)
..a<ClaimList>(5, 'featured', $pb.PbFieldType.OM, ClaimList.getDefault, ClaimList.create)
..hasRequiredFields = false
;
Channel._() : super();
factory Channel() => create();
factory Channel.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Channel.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Channel clone() => Channel()..mergeFromMessage(this);
Channel copyWith(void Function(Channel) updates) => super.copyWith((message) => updates(message as Channel));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Channel create() => Channel._();
Channel createEmptyInstance() => create();
static $pb.PbList<Channel> createRepeated() => $pb.PbList<Channel>();
static Channel getDefault() => _defaultInstance ??= create()..freeze();
static Channel _defaultInstance;
$core.List<$core.int> get publicKey => $_getN(0);
set publicKey($core.List<$core.int> v) { $_setBytes(0, v); }
$core.bool hasPublicKey() => $_has(0);
void clearPublicKey() => clearField(1);
$core.String get email => $_getS(1, '');
set email($core.String v) { $_setString(1, v); }
$core.bool hasEmail() => $_has(1);
void clearEmail() => clearField(2);
$core.String get websiteUrl => $_getS(2, '');
set websiteUrl($core.String v) { $_setString(2, v); }
$core.bool hasWebsiteUrl() => $_has(2);
void clearWebsiteUrl() => clearField(3);
Source get cover => $_getN(3);
set cover(Source v) { setField(4, v); }
$core.bool hasCover() => $_has(3);
void clearCover() => clearField(4);
ClaimList get featured => $_getN(4);
set featured(ClaimList v) { setField(5, v); }
$core.bool hasFeatured() => $_has(4);
void clearFeatured() => clearField(5);
}
class ClaimReference extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClaimReference', package: const $pb.PackageName('pb'))
..a<$core.List<$core.int>>(1, 'claimHash', $pb.PbFieldType.OY)
..hasRequiredFields = false
;
ClaimReference._() : super();
factory ClaimReference() => create();
factory ClaimReference.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ClaimReference.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
ClaimReference clone() => ClaimReference()..mergeFromMessage(this);
ClaimReference copyWith(void Function(ClaimReference) updates) => super.copyWith((message) => updates(message as ClaimReference));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClaimReference create() => ClaimReference._();
ClaimReference createEmptyInstance() => create();
static $pb.PbList<ClaimReference> createRepeated() => $pb.PbList<ClaimReference>();
static ClaimReference getDefault() => _defaultInstance ??= create()..freeze();
static ClaimReference _defaultInstance;
$core.List<$core.int> get claimHash => $_getN(0);
set claimHash($core.List<$core.int> v) { $_setBytes(0, v); }
$core.bool hasClaimHash() => $_has(0);
void clearClaimHash() => clearField(1);
}
class ClaimList extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClaimList', package: const $pb.PackageName('pb'))
..e<ClaimList_ListType>(1, 'listType', $pb.PbFieldType.OE, ClaimList_ListType.COLLECTION, ClaimList_ListType.valueOf, ClaimList_ListType.values)
..pc<ClaimReference>(2, 'claimReferences', $pb.PbFieldType.PM,ClaimReference.create)
..hasRequiredFields = false
;
ClaimList._() : super();
factory ClaimList() => create();
factory ClaimList.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ClaimList.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
ClaimList clone() => ClaimList()..mergeFromMessage(this);
ClaimList copyWith(void Function(ClaimList) updates) => super.copyWith((message) => updates(message as ClaimList));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClaimList create() => ClaimList._();
ClaimList createEmptyInstance() => create();
static $pb.PbList<ClaimList> createRepeated() => $pb.PbList<ClaimList>();
static ClaimList getDefault() => _defaultInstance ??= create()..freeze();
static ClaimList _defaultInstance;
ClaimList_ListType get listType => $_getN(0);
set listType(ClaimList_ListType v) { setField(1, v); }
$core.bool hasListType() => $_has(0);
void clearListType() => clearField(1);
$core.List<ClaimReference> get claimReferences => $_getList(1);
}
class Source extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Source', package: const $pb.PackageName('pb'))
..a<$core.List<$core.int>>(1, 'hash', $pb.PbFieldType.OY)
..aOS(2, 'name')
..a<Int64>(3, 'size', $pb.PbFieldType.OU6, Int64.ZERO)
..aOS(4, 'mediaType')
..aOS(5, 'url')
..a<$core.List<$core.int>>(6, 'sdHash', $pb.PbFieldType.OY)
..hasRequiredFields = false
;
Source._() : super();
factory Source() => create();
factory Source.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Source.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Source clone() => Source()..mergeFromMessage(this);
Source copyWith(void Function(Source) updates) => super.copyWith((message) => updates(message as Source));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Source create() => Source._();
Source createEmptyInstance() => create();
static $pb.PbList<Source> createRepeated() => $pb.PbList<Source>();
static Source getDefault() => _defaultInstance ??= create()..freeze();
static Source _defaultInstance;
$core.List<$core.int> get hash => $_getN(0);
set hash($core.List<$core.int> v) { $_setBytes(0, v); }
$core.bool hasHash() => $_has(0);
void clearHash() => clearField(1);
$core.String get name => $_getS(1, '');
set name($core.String v) { $_setString(1, v); }
$core.bool hasName() => $_has(1);
void clearName() => clearField(2);
Int64 get size => $_getI64(2);
set size(Int64 v) { $_setInt64(2, v); }
$core.bool hasSize() => $_has(2);
void clearSize() => clearField(3);
$core.String get mediaType => $_getS(3, '');
set mediaType($core.String v) { $_setString(3, v); }
$core.bool hasMediaType() => $_has(3);
void clearMediaType() => clearField(4);
$core.String get url => $_getS(4, '');
set url($core.String v) { $_setString(4, v); }
$core.bool hasUrl() => $_has(4);
void clearUrl() => clearField(5);
$core.List<$core.int> get sdHash => $_getN(5);
set sdHash($core.List<$core.int> v) { $_setBytes(5, v); }
$core.bool hasSdHash() => $_has(5);
void clearSdHash() => clearField(6);
}
class Fee extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Fee', package: const $pb.PackageName('pb'))
..e<Fee_Currency>(1, 'currency', $pb.PbFieldType.OE, Fee_Currency.UNKNOWN_CURRENCY, Fee_Currency.valueOf, Fee_Currency.values)
..a<$core.List<$core.int>>(2, 'address', $pb.PbFieldType.OY)
..a<Int64>(3, 'amount', $pb.PbFieldType.OU6, Int64.ZERO)
..hasRequiredFields = false
;
Fee._() : super();
factory Fee() => create();
factory Fee.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Fee.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Fee clone() => Fee()..mergeFromMessage(this);
Fee copyWith(void Function(Fee) updates) => super.copyWith((message) => updates(message as Fee));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Fee create() => Fee._();
Fee createEmptyInstance() => create();
static $pb.PbList<Fee> createRepeated() => $pb.PbList<Fee>();
static Fee getDefault() => _defaultInstance ??= create()..freeze();
static Fee _defaultInstance;
Fee_Currency get currency => $_getN(0);
set currency(Fee_Currency v) { setField(1, v); }
$core.bool hasCurrency() => $_has(0);
void clearCurrency() => clearField(1);
$core.List<$core.int> get address => $_getN(1);
set address($core.List<$core.int> v) { $_setBytes(1, v); }
$core.bool hasAddress() => $_has(1);
void clearAddress() => clearField(2);
Int64 get amount => $_getI64(2);
set amount(Int64 v) { $_setInt64(2, v); }
$core.bool hasAmount() => $_has(2);
void clearAmount() => clearField(3);
}
class Image extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Image', package: const $pb.PackageName('pb'))
..a<$core.int>(1, 'width', $pb.PbFieldType.OU3)
..a<$core.int>(2, 'height', $pb.PbFieldType.OU3)
..hasRequiredFields = false
;
Image._() : super();
factory Image() => create();
factory Image.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Image.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Image clone() => Image()..mergeFromMessage(this);
Image copyWith(void Function(Image) updates) => super.copyWith((message) => updates(message as Image));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Image create() => Image._();
Image createEmptyInstance() => create();
static $pb.PbList<Image> createRepeated() => $pb.PbList<Image>();
static Image getDefault() => _defaultInstance ??= create()..freeze();
static Image _defaultInstance;
$core.int get width => $_get(0, 0);
set width($core.int v) { $_setUnsignedInt32(0, v); }
$core.bool hasWidth() => $_has(0);
void clearWidth() => clearField(1);
$core.int get height => $_get(1, 0);
set height($core.int v) { $_setUnsignedInt32(1, v); }
$core.bool hasHeight() => $_has(1);
void clearHeight() => clearField(2);
}
class Video extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Video', package: const $pb.PackageName('pb'))
..a<$core.int>(1, 'width', $pb.PbFieldType.OU3)
..a<$core.int>(2, 'height', $pb.PbFieldType.OU3)
..a<$core.int>(3, 'duration', $pb.PbFieldType.OU3)
..a<Audio>(15, 'audio', $pb.PbFieldType.OM, Audio.getDefault, Audio.create)
..hasRequiredFields = false
;
Video._() : super();
factory Video() => create();
factory Video.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Video.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Video clone() => Video()..mergeFromMessage(this);
Video copyWith(void Function(Video) updates) => super.copyWith((message) => updates(message as Video));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Video create() => Video._();
Video createEmptyInstance() => create();
static $pb.PbList<Video> createRepeated() => $pb.PbList<Video>();
static Video getDefault() => _defaultInstance ??= create()..freeze();
static Video _defaultInstance;
$core.int get width => $_get(0, 0);
set width($core.int v) { $_setUnsignedInt32(0, v); }
$core.bool hasWidth() => $_has(0);
void clearWidth() => clearField(1);
$core.int get height => $_get(1, 0);
set height($core.int v) { $_setUnsignedInt32(1, v); }
$core.bool hasHeight() => $_has(1);
void clearHeight() => clearField(2);
$core.int get duration => $_get(2, 0);
set duration($core.int v) { $_setUnsignedInt32(2, v); }
$core.bool hasDuration() => $_has(2);
void clearDuration() => clearField(3);
Audio get audio => $_getN(3);
set audio(Audio v) { setField(15, v); }
$core.bool hasAudio() => $_has(3);
void clearAudio() => clearField(15);
}
class Audio extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Audio', package: const $pb.PackageName('pb'))
..a<$core.int>(1, 'duration', $pb.PbFieldType.OU3)
..hasRequiredFields = false
;
Audio._() : super();
factory Audio() => create();
factory Audio.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Audio.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Audio clone() => Audio()..mergeFromMessage(this);
Audio copyWith(void Function(Audio) updates) => super.copyWith((message) => updates(message as Audio));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Audio create() => Audio._();
Audio createEmptyInstance() => create();
static $pb.PbList<Audio> createRepeated() => $pb.PbList<Audio>();
static Audio getDefault() => _defaultInstance ??= create()..freeze();
static Audio _defaultInstance;
$core.int get duration => $_get(0, 0);
set duration($core.int v) { $_setUnsignedInt32(0, v); }
$core.bool hasDuration() => $_has(0);
void clearDuration() => clearField(1);
}
class Software extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Software', package: const $pb.PackageName('pb'))
..aOS(1, 'os')
..hasRequiredFields = false
;
Software._() : super();
factory Software() => create();
factory Software.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Software.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Software clone() => Software()..mergeFromMessage(this);
Software copyWith(void Function(Software) updates) => super.copyWith((message) => updates(message as Software));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Software create() => Software._();
Software createEmptyInstance() => create();
static $pb.PbList<Software> createRepeated() => $pb.PbList<Software>();
static Software getDefault() => _defaultInstance ??= create()..freeze();
static Software _defaultInstance;
$core.String get os => $_getS(0, '');
set os($core.String v) { $_setString(0, v); }
$core.bool hasOs() => $_has(0);
void clearOs() => clearField(1);
}
class Language extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Language', package: const $pb.PackageName('pb'))
..e<Language_Language>(1, 'language', $pb.PbFieldType.OE, Language_Language.UNKNOWN_LANGUAGE, Language_Language.valueOf, Language_Language.values)
..e<Language_Script>(2, 'script', $pb.PbFieldType.OE, Language_Script.UNKNOWN_SCRIPT, Language_Script.valueOf, Language_Script.values)
..e<Location_Country>(3, 'region', $pb.PbFieldType.OE, Location_Country.UNKNOWN_COUNTRY, Location_Country.valueOf, Location_Country.values)
..hasRequiredFields = false
;
Language._() : super();
factory Language() => create();
factory Language.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Language.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Language clone() => Language()..mergeFromMessage(this);
Language copyWith(void Function(Language) updates) => super.copyWith((message) => updates(message as Language));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Language create() => Language._();
Language createEmptyInstance() => create();
static $pb.PbList<Language> createRepeated() => $pb.PbList<Language>();
static Language getDefault() => _defaultInstance ??= create()..freeze();
static Language _defaultInstance;
Language_Language get language => $_getN(0);
set language(Language_Language v) { setField(1, v); }
$core.bool hasLanguage() => $_has(0);
void clearLanguage() => clearField(1);
Language_Script get script => $_getN(1);
set script(Language_Script v) { setField(2, v); }
$core.bool hasScript() => $_has(1);
void clearScript() => clearField(2);
Location_Country get region => $_getN(2);
set region(Location_Country v) { setField(3, v); }
$core.bool hasRegion() => $_has(2);
void clearRegion() => clearField(3);
}
class Location extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Location', package: const $pb.PackageName('pb'))
..e<Location_Country>(1, 'country', $pb.PbFieldType.OE, Location_Country.UNKNOWN_COUNTRY, Location_Country.valueOf, Location_Country.values)
..aOS(2, 'state')
..aOS(3, 'city')
..aOS(4, 'code')
..a<$core.int>(5, 'latitude', $pb.PbFieldType.OS3)
..a<$core.int>(6, 'longitude', $pb.PbFieldType.OS3)
..hasRequiredFields = false
;
Location._() : super();
factory Location() => create();
factory Location.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Location.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Location clone() => Location()..mergeFromMessage(this);
Location copyWith(void Function(Location) updates) => super.copyWith((message) => updates(message as Location));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Location create() => Location._();
Location createEmptyInstance() => create();
static $pb.PbList<Location> createRepeated() => $pb.PbList<Location>();
static Location getDefault() => _defaultInstance ??= create()..freeze();
static Location _defaultInstance;
Location_Country get country => $_getN(0);
set country(Location_Country v) { setField(1, v); }
$core.bool hasCountry() => $_has(0);
void clearCountry() => clearField(1);
$core.String get state => $_getS(1, '');
set state($core.String v) { $_setString(1, v); }
$core.bool hasState() => $_has(1);
void clearState() => clearField(2);
$core.String get city => $_getS(2, '');
set city($core.String v) { $_setString(2, v); }
$core.bool hasCity() => $_has(2);
void clearCity() => clearField(3);
$core.String get code => $_getS(3, '');
set code($core.String v) { $_setString(3, v); }
$core.bool hasCode() => $_has(3);
void clearCode() => clearField(4);
$core.int get latitude => $_get(4, 0);
set latitude($core.int v) { $_setSignedInt32(4, v); }
$core.bool hasLatitude() => $_has(4);
void clearLatitude() => clearField(5);
$core.int get longitude => $_get(5, 0);
set longitude($core.int v) { $_setSignedInt32(5, v); }
$core.bool hasLongitude() => $_has(5);
void clearLongitude() => clearField(6);
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,833 @@
///
// Generated code. Do not modify.
// source: claim.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
const Claim$json = const {
'1': 'Claim',
'2': const [
const {'1': 'stream', '3': 1, '4': 1, '5': 11, '6': '.pb.Stream', '9': 0, '10': 'stream'},
const {'1': 'channel', '3': 2, '4': 1, '5': 11, '6': '.pb.Channel', '9': 0, '10': 'channel'},
const {'1': 'collection', '3': 3, '4': 1, '5': 11, '6': '.pb.ClaimList', '9': 0, '10': 'collection'},
const {'1': 'repost', '3': 4, '4': 1, '5': 11, '6': '.pb.ClaimReference', '9': 0, '10': 'repost'},
const {'1': 'title', '3': 8, '4': 1, '5': 9, '10': 'title'},
const {'1': 'description', '3': 9, '4': 1, '5': 9, '10': 'description'},
const {'1': 'thumbnail', '3': 10, '4': 1, '5': 11, '6': '.pb.Source', '10': 'thumbnail'},
const {'1': 'tags', '3': 11, '4': 3, '5': 9, '10': 'tags'},
const {'1': 'languages', '3': 12, '4': 3, '5': 11, '6': '.pb.Language', '10': 'languages'},
const {'1': 'locations', '3': 13, '4': 3, '5': 11, '6': '.pb.Location', '10': 'locations'},
],
'8': const [
const {'1': 'type'},
],
};
const Stream$json = const {
'1': 'Stream',
'2': const [
const {'1': 'source', '3': 1, '4': 1, '5': 11, '6': '.pb.Source', '10': 'source'},
const {'1': 'author', '3': 2, '4': 1, '5': 9, '10': 'author'},
const {'1': 'license', '3': 3, '4': 1, '5': 9, '10': 'license'},
const {'1': 'license_url', '3': 4, '4': 1, '5': 9, '10': 'licenseUrl'},
const {'1': 'release_time', '3': 5, '4': 1, '5': 3, '10': 'releaseTime'},
const {'1': 'fee', '3': 6, '4': 1, '5': 11, '6': '.pb.Fee', '10': 'fee'},
const {'1': 'image', '3': 10, '4': 1, '5': 11, '6': '.pb.Image', '9': 0, '10': 'image'},
const {'1': 'video', '3': 11, '4': 1, '5': 11, '6': '.pb.Video', '9': 0, '10': 'video'},
const {'1': 'audio', '3': 12, '4': 1, '5': 11, '6': '.pb.Audio', '9': 0, '10': 'audio'},
const {'1': 'software', '3': 13, '4': 1, '5': 11, '6': '.pb.Software', '9': 0, '10': 'software'},
],
'8': const [
const {'1': 'type'},
],
};
const Channel$json = const {
'1': 'Channel',
'2': const [
const {'1': 'public_key', '3': 1, '4': 1, '5': 12, '10': 'publicKey'},
const {'1': 'email', '3': 2, '4': 1, '5': 9, '10': 'email'},
const {'1': 'website_url', '3': 3, '4': 1, '5': 9, '10': 'websiteUrl'},
const {'1': 'cover', '3': 4, '4': 1, '5': 11, '6': '.pb.Source', '10': 'cover'},
const {'1': 'featured', '3': 5, '4': 1, '5': 11, '6': '.pb.ClaimList', '10': 'featured'},
],
};
const ClaimReference$json = const {
'1': 'ClaimReference',
'2': const [
const {'1': 'claim_hash', '3': 1, '4': 1, '5': 12, '10': 'claimHash'},
],
};
const ClaimList$json = const {
'1': 'ClaimList',
'2': const [
const {'1': 'list_type', '3': 1, '4': 1, '5': 14, '6': '.pb.ClaimList.ListType', '10': 'listType'},
const {'1': 'claim_references', '3': 2, '4': 3, '5': 11, '6': '.pb.ClaimReference', '10': 'claimReferences'},
],
'4': const [ClaimList_ListType$json],
};
const ClaimList_ListType$json = const {
'1': 'ListType',
'2': const [
const {'1': 'COLLECTION', '2': 0},
const {'1': 'DERIVATION', '2': 2},
],
};
const Source$json = const {
'1': 'Source',
'2': const [
const {'1': 'hash', '3': 1, '4': 1, '5': 12, '10': 'hash'},
const {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
const {'1': 'size', '3': 3, '4': 1, '5': 4, '10': 'size'},
const {'1': 'media_type', '3': 4, '4': 1, '5': 9, '10': 'mediaType'},
const {'1': 'url', '3': 5, '4': 1, '5': 9, '10': 'url'},
const {'1': 'sd_hash', '3': 6, '4': 1, '5': 12, '10': 'sdHash'},
],
};
const Fee$json = const {
'1': 'Fee',
'2': const [
const {'1': 'currency', '3': 1, '4': 1, '5': 14, '6': '.pb.Fee.Currency', '10': 'currency'},
const {'1': 'address', '3': 2, '4': 1, '5': 12, '10': 'address'},
const {'1': 'amount', '3': 3, '4': 1, '5': 4, '10': 'amount'},
],
'4': const [Fee_Currency$json],
};
const Fee_Currency$json = const {
'1': 'Currency',
'2': const [
const {'1': 'UNKNOWN_CURRENCY', '2': 0},
const {'1': 'LBC', '2': 1},
const {'1': 'BTC', '2': 2},
const {'1': 'USD', '2': 3},
],
};
const Image$json = const {
'1': 'Image',
'2': const [
const {'1': 'width', '3': 1, '4': 1, '5': 13, '10': 'width'},
const {'1': 'height', '3': 2, '4': 1, '5': 13, '10': 'height'},
],
};
const Video$json = const {
'1': 'Video',
'2': const [
const {'1': 'width', '3': 1, '4': 1, '5': 13, '10': 'width'},
const {'1': 'height', '3': 2, '4': 1, '5': 13, '10': 'height'},
const {'1': 'duration', '3': 3, '4': 1, '5': 13, '10': 'duration'},
const {'1': 'audio', '3': 15, '4': 1, '5': 11, '6': '.pb.Audio', '10': 'audio'},
],
};
const Audio$json = const {
'1': 'Audio',
'2': const [
const {'1': 'duration', '3': 1, '4': 1, '5': 13, '10': 'duration'},
],
};
const Software$json = const {
'1': 'Software',
'2': const [
const {'1': 'os', '3': 1, '4': 1, '5': 9, '10': 'os'},
],
'4': const [Software_OS$json],
};
const Software_OS$json = const {
'1': 'OS',
'2': const [
const {'1': 'UNKNOWN_OS', '2': 0},
const {'1': 'ANY', '2': 1},
const {'1': 'LINUX', '2': 2},
const {'1': 'WINDOWS', '2': 3},
const {'1': 'MAC', '2': 4},
const {'1': 'ANDROID', '2': 5},
const {'1': 'IOS', '2': 6},
],
};
const Language$json = const {
'1': 'Language',
'2': const [
const {'1': 'language', '3': 1, '4': 1, '5': 14, '6': '.pb.Language.Language', '10': 'language'},
const {'1': 'script', '3': 2, '4': 1, '5': 14, '6': '.pb.Language.Script', '10': 'script'},
const {'1': 'region', '3': 3, '4': 1, '5': 14, '6': '.pb.Location.Country', '10': 'region'},
],
'4': const [Language_Language$json, Language_Script$json],
};
const Language_Language$json = const {
'1': 'Language',
'2': const [
const {'1': 'UNKNOWN_LANGUAGE', '2': 0},
const {'1': 'en', '2': 1},
const {'1': 'aa', '2': 2},
const {'1': 'ab', '2': 3},
const {'1': 'ae', '2': 4},
const {'1': 'af', '2': 5},
const {'1': 'ak', '2': 6},
const {'1': 'am', '2': 7},
const {'1': 'an', '2': 8},
const {'1': 'ar', '2': 9},
const {'1': 'as', '2': 10},
const {'1': 'av', '2': 11},
const {'1': 'ay', '2': 12},
const {'1': 'az', '2': 13},
const {'1': 'ba', '2': 14},
const {'1': 'be', '2': 15},
const {'1': 'bg', '2': 16},
const {'1': 'bh', '2': 17},
const {'1': 'bi', '2': 18},
const {'1': 'bm', '2': 19},
const {'1': 'bn', '2': 20},
const {'1': 'bo', '2': 21},
const {'1': 'br', '2': 22},
const {'1': 'bs', '2': 23},
const {'1': 'ca', '2': 24},
const {'1': 'ce', '2': 25},
const {'1': 'ch', '2': 26},
const {'1': 'co', '2': 27},
const {'1': 'cr', '2': 28},
const {'1': 'cs', '2': 29},
const {'1': 'cu', '2': 30},
const {'1': 'cv', '2': 31},
const {'1': 'cy', '2': 32},
const {'1': 'da', '2': 33},
const {'1': 'de', '2': 34},
const {'1': 'dv', '2': 35},
const {'1': 'dz', '2': 36},
const {'1': 'ee', '2': 37},
const {'1': 'el', '2': 38},
const {'1': 'eo', '2': 39},
const {'1': 'es', '2': 40},
const {'1': 'et', '2': 41},
const {'1': 'eu', '2': 42},
const {'1': 'fa', '2': 43},
const {'1': 'ff', '2': 44},
const {'1': 'fi', '2': 45},
const {'1': 'fj', '2': 46},
const {'1': 'fo', '2': 47},
const {'1': 'fr', '2': 48},
const {'1': 'fy', '2': 49},
const {'1': 'ga', '2': 50},
const {'1': 'gd', '2': 51},
const {'1': 'gl', '2': 52},
const {'1': 'gn', '2': 53},
const {'1': 'gu', '2': 54},
const {'1': 'gv', '2': 55},
const {'1': 'ha', '2': 56},
const {'1': 'he', '2': 57},
const {'1': 'hi', '2': 58},
const {'1': 'ho', '2': 59},
const {'1': 'hr', '2': 60},
const {'1': 'ht', '2': 61},
const {'1': 'hu', '2': 62},
const {'1': 'hy', '2': 63},
const {'1': 'hz', '2': 64},
const {'1': 'ia', '2': 65},
const {'1': 'id', '2': 66},
const {'1': 'ie', '2': 67},
const {'1': 'ig', '2': 68},
const {'1': 'ii', '2': 69},
const {'1': 'ik', '2': 70},
const {'1': 'io', '2': 71},
const {'1': 'is', '2': 72},
const {'1': 'it', '2': 73},
const {'1': 'iu', '2': 74},
const {'1': 'ja', '2': 75},
const {'1': 'jv', '2': 76},
const {'1': 'ka', '2': 77},
const {'1': 'kg', '2': 78},
const {'1': 'ki', '2': 79},
const {'1': 'kj', '2': 80},
const {'1': 'kk', '2': 81},
const {'1': 'kl', '2': 82},
const {'1': 'km', '2': 83},
const {'1': 'kn', '2': 84},
const {'1': 'ko', '2': 85},
const {'1': 'kr', '2': 86},
const {'1': 'ks', '2': 87},
const {'1': 'ku', '2': 88},
const {'1': 'kv', '2': 89},
const {'1': 'kw', '2': 90},
const {'1': 'ky', '2': 91},
const {'1': 'la', '2': 92},
const {'1': 'lb', '2': 93},
const {'1': 'lg', '2': 94},
const {'1': 'li', '2': 95},
const {'1': 'ln', '2': 96},
const {'1': 'lo', '2': 97},
const {'1': 'lt', '2': 98},
const {'1': 'lu', '2': 99},
const {'1': 'lv', '2': 100},
const {'1': 'mg', '2': 101},
const {'1': 'mh', '2': 102},
const {'1': 'mi', '2': 103},
const {'1': 'mk', '2': 104},
const {'1': 'ml', '2': 105},
const {'1': 'mn', '2': 106},
const {'1': 'mr', '2': 107},
const {'1': 'ms', '2': 108},
const {'1': 'mt', '2': 109},
const {'1': 'my', '2': 110},
const {'1': 'na', '2': 111},
const {'1': 'nb', '2': 112},
const {'1': 'nd', '2': 113},
const {'1': 'ne', '2': 114},
const {'1': 'ng', '2': 115},
const {'1': 'nl', '2': 116},
const {'1': 'nn', '2': 117},
const {'1': 'no', '2': 118},
const {'1': 'nr', '2': 119},
const {'1': 'nv', '2': 120},
const {'1': 'ny', '2': 121},
const {'1': 'oc', '2': 122},
const {'1': 'oj', '2': 123},
const {'1': 'om', '2': 124},
const {'1': 'or', '2': 125},
const {'1': 'os', '2': 126},
const {'1': 'pa', '2': 127},
const {'1': 'pi', '2': 128},
const {'1': 'pl', '2': 129},
const {'1': 'ps', '2': 130},
const {'1': 'pt', '2': 131},
const {'1': 'qu', '2': 132},
const {'1': 'rm', '2': 133},
const {'1': 'rn', '2': 134},
const {'1': 'ro', '2': 135},
const {'1': 'ru', '2': 136},
const {'1': 'rw', '2': 137},
const {'1': 'sa', '2': 138},
const {'1': 'sc', '2': 139},
const {'1': 'sd', '2': 140},
const {'1': 'se', '2': 141},
const {'1': 'sg', '2': 142},
const {'1': 'si', '2': 143},
const {'1': 'sk', '2': 144},
const {'1': 'sl', '2': 145},
const {'1': 'sm', '2': 146},
const {'1': 'sn', '2': 147},
const {'1': 'so', '2': 148},
const {'1': 'sq', '2': 149},
const {'1': 'sr', '2': 150},
const {'1': 'ss', '2': 151},
const {'1': 'st', '2': 152},
const {'1': 'su', '2': 153},
const {'1': 'sv', '2': 154},
const {'1': 'sw', '2': 155},
const {'1': 'ta', '2': 156},
const {'1': 'te', '2': 157},
const {'1': 'tg', '2': 158},
const {'1': 'th', '2': 159},
const {'1': 'ti', '2': 160},
const {'1': 'tk', '2': 161},
const {'1': 'tl', '2': 162},
const {'1': 'tn', '2': 163},
const {'1': 'to', '2': 164},
const {'1': 'tr', '2': 165},
const {'1': 'ts', '2': 166},
const {'1': 'tt', '2': 167},
const {'1': 'tw', '2': 168},
const {'1': 'ty', '2': 169},
const {'1': 'ug', '2': 170},
const {'1': 'uk', '2': 171},
const {'1': 'ur', '2': 172},
const {'1': 'uz', '2': 173},
const {'1': 've', '2': 174},
const {'1': 'vi', '2': 175},
const {'1': 'vo', '2': 176},
const {'1': 'wa', '2': 177},
const {'1': 'wo', '2': 178},
const {'1': 'xh', '2': 179},
const {'1': 'yi', '2': 180},
const {'1': 'yo', '2': 181},
const {'1': 'za', '2': 182},
const {'1': 'zh', '2': 183},
const {'1': 'zu', '2': 184},
],
};
const Language_Script$json = const {
'1': 'Script',
'2': const [
const {'1': 'UNKNOWN_SCRIPT', '2': 0},
const {'1': 'Adlm', '2': 1},
const {'1': 'Afak', '2': 2},
const {'1': 'Aghb', '2': 3},
const {'1': 'Ahom', '2': 4},
const {'1': 'Arab', '2': 5},
const {'1': 'Aran', '2': 6},
const {'1': 'Armi', '2': 7},
const {'1': 'Armn', '2': 8},
const {'1': 'Avst', '2': 9},
const {'1': 'Bali', '2': 10},
const {'1': 'Bamu', '2': 11},
const {'1': 'Bass', '2': 12},
const {'1': 'Batk', '2': 13},
const {'1': 'Beng', '2': 14},
const {'1': 'Bhks', '2': 15},
const {'1': 'Blis', '2': 16},
const {'1': 'Bopo', '2': 17},
const {'1': 'Brah', '2': 18},
const {'1': 'Brai', '2': 19},
const {'1': 'Bugi', '2': 20},
const {'1': 'Buhd', '2': 21},
const {'1': 'Cakm', '2': 22},
const {'1': 'Cans', '2': 23},
const {'1': 'Cari', '2': 24},
const {'1': 'Cham', '2': 25},
const {'1': 'Cher', '2': 26},
const {'1': 'Cirt', '2': 27},
const {'1': 'Copt', '2': 28},
const {'1': 'Cpmn', '2': 29},
const {'1': 'Cprt', '2': 30},
const {'1': 'Cyrl', '2': 31},
const {'1': 'Cyrs', '2': 32},
const {'1': 'Deva', '2': 33},
const {'1': 'Dogr', '2': 34},
const {'1': 'Dsrt', '2': 35},
const {'1': 'Dupl', '2': 36},
const {'1': 'Egyd', '2': 37},
const {'1': 'Egyh', '2': 38},
const {'1': 'Egyp', '2': 39},
const {'1': 'Elba', '2': 40},
const {'1': 'Elym', '2': 41},
const {'1': 'Ethi', '2': 42},
const {'1': 'Geok', '2': 43},
const {'1': 'Geor', '2': 44},
const {'1': 'Glag', '2': 45},
const {'1': 'Gong', '2': 46},
const {'1': 'Gonm', '2': 47},
const {'1': 'Goth', '2': 48},
const {'1': 'Gran', '2': 49},
const {'1': 'Grek', '2': 50},
const {'1': 'Gujr', '2': 51},
const {'1': 'Guru', '2': 52},
const {'1': 'Hanb', '2': 53},
const {'1': 'Hang', '2': 54},
const {'1': 'Hani', '2': 55},
const {'1': 'Hano', '2': 56},
const {'1': 'Hans', '2': 57},
const {'1': 'Hant', '2': 58},
const {'1': 'Hatr', '2': 59},
const {'1': 'Hebr', '2': 60},
const {'1': 'Hira', '2': 61},
const {'1': 'Hluw', '2': 62},
const {'1': 'Hmng', '2': 63},
const {'1': 'Hmnp', '2': 64},
const {'1': 'Hrkt', '2': 65},
const {'1': 'Hung', '2': 66},
const {'1': 'Inds', '2': 67},
const {'1': 'Ital', '2': 68},
const {'1': 'Jamo', '2': 69},
const {'1': 'Java', '2': 70},
const {'1': 'Jpan', '2': 71},
const {'1': 'Jurc', '2': 72},
const {'1': 'Kali', '2': 73},
const {'1': 'Kana', '2': 74},
const {'1': 'Khar', '2': 75},
const {'1': 'Khmr', '2': 76},
const {'1': 'Khoj', '2': 77},
const {'1': 'Kitl', '2': 78},
const {'1': 'Kits', '2': 79},
const {'1': 'Knda', '2': 80},
const {'1': 'Kore', '2': 81},
const {'1': 'Kpel', '2': 82},
const {'1': 'Kthi', '2': 83},
const {'1': 'Lana', '2': 84},
const {'1': 'Laoo', '2': 85},
const {'1': 'Latf', '2': 86},
const {'1': 'Latg', '2': 87},
const {'1': 'Latn', '2': 88},
const {'1': 'Leke', '2': 89},
const {'1': 'Lepc', '2': 90},
const {'1': 'Limb', '2': 91},
const {'1': 'Lina', '2': 92},
const {'1': 'Linb', '2': 93},
const {'1': 'Lisu', '2': 94},
const {'1': 'Loma', '2': 95},
const {'1': 'Lyci', '2': 96},
const {'1': 'Lydi', '2': 97},
const {'1': 'Mahj', '2': 98},
const {'1': 'Maka', '2': 99},
const {'1': 'Mand', '2': 100},
const {'1': 'Mani', '2': 101},
const {'1': 'Marc', '2': 102},
const {'1': 'Maya', '2': 103},
const {'1': 'Medf', '2': 104},
const {'1': 'Mend', '2': 105},
const {'1': 'Merc', '2': 106},
const {'1': 'Mero', '2': 107},
const {'1': 'Mlym', '2': 108},
const {'1': 'Modi', '2': 109},
const {'1': 'Mong', '2': 110},
const {'1': 'Moon', '2': 111},
const {'1': 'Mroo', '2': 112},
const {'1': 'Mtei', '2': 113},
const {'1': 'Mult', '2': 114},
const {'1': 'Mymr', '2': 115},
const {'1': 'Nand', '2': 116},
const {'1': 'Narb', '2': 117},
const {'1': 'Nbat', '2': 118},
const {'1': 'Newa', '2': 119},
const {'1': 'Nkdb', '2': 120},
const {'1': 'Nkgb', '2': 121},
const {'1': 'Nkoo', '2': 122},
const {'1': 'Nshu', '2': 123},
const {'1': 'Ogam', '2': 124},
const {'1': 'Olck', '2': 125},
const {'1': 'Orkh', '2': 126},
const {'1': 'Orya', '2': 127},
const {'1': 'Osge', '2': 128},
const {'1': 'Osma', '2': 129},
const {'1': 'Palm', '2': 130},
const {'1': 'Pauc', '2': 131},
const {'1': 'Perm', '2': 132},
const {'1': 'Phag', '2': 133},
const {'1': 'Phli', '2': 134},
const {'1': 'Phlp', '2': 135},
const {'1': 'Phlv', '2': 136},
const {'1': 'Phnx', '2': 137},
const {'1': 'Plrd', '2': 138},
const {'1': 'Piqd', '2': 139},
const {'1': 'Prti', '2': 140},
const {'1': 'Qaaa', '2': 141},
const {'1': 'Qabx', '2': 142},
const {'1': 'Rjng', '2': 143},
const {'1': 'Rohg', '2': 144},
const {'1': 'Roro', '2': 145},
const {'1': 'Runr', '2': 146},
const {'1': 'Samr', '2': 147},
const {'1': 'Sara', '2': 148},
const {'1': 'Sarb', '2': 149},
const {'1': 'Saur', '2': 150},
const {'1': 'Sgnw', '2': 151},
const {'1': 'Shaw', '2': 152},
const {'1': 'Shrd', '2': 153},
const {'1': 'Shui', '2': 154},
const {'1': 'Sidd', '2': 155},
const {'1': 'Sind', '2': 156},
const {'1': 'Sinh', '2': 157},
const {'1': 'Sogd', '2': 158},
const {'1': 'Sogo', '2': 159},
const {'1': 'Sora', '2': 160},
const {'1': 'Soyo', '2': 161},
const {'1': 'Sund', '2': 162},
const {'1': 'Sylo', '2': 163},
const {'1': 'Syrc', '2': 164},
const {'1': 'Syre', '2': 165},
const {'1': 'Syrj', '2': 166},
const {'1': 'Syrn', '2': 167},
const {'1': 'Tagb', '2': 168},
const {'1': 'Takr', '2': 169},
const {'1': 'Tale', '2': 170},
const {'1': 'Talu', '2': 171},
const {'1': 'Taml', '2': 172},
const {'1': 'Tang', '2': 173},
const {'1': 'Tavt', '2': 174},
const {'1': 'Telu', '2': 175},
const {'1': 'Teng', '2': 176},
const {'1': 'Tfng', '2': 177},
const {'1': 'Tglg', '2': 178},
const {'1': 'Thaa', '2': 179},
const {'1': 'Thai', '2': 180},
const {'1': 'Tibt', '2': 181},
const {'1': 'Tirh', '2': 182},
const {'1': 'Ugar', '2': 183},
const {'1': 'Vaii', '2': 184},
const {'1': 'Visp', '2': 185},
const {'1': 'Wara', '2': 186},
const {'1': 'Wcho', '2': 187},
const {'1': 'Wole', '2': 188},
const {'1': 'Xpeo', '2': 189},
const {'1': 'Xsux', '2': 190},
const {'1': 'Yiii', '2': 191},
const {'1': 'Zanb', '2': 192},
const {'1': 'Zinh', '2': 193},
const {'1': 'Zmth', '2': 194},
const {'1': 'Zsye', '2': 195},
const {'1': 'Zsym', '2': 196},
const {'1': 'Zxxx', '2': 197},
const {'1': 'Zyyy', '2': 198},
const {'1': 'Zzzz', '2': 199},
],
};
const Location$json = const {
'1': 'Location',
'2': const [
const {'1': 'country', '3': 1, '4': 1, '5': 14, '6': '.pb.Location.Country', '10': 'country'},
const {'1': 'state', '3': 2, '4': 1, '5': 9, '10': 'state'},
const {'1': 'city', '3': 3, '4': 1, '5': 9, '10': 'city'},
const {'1': 'code', '3': 4, '4': 1, '5': 9, '10': 'code'},
const {'1': 'latitude', '3': 5, '4': 1, '5': 17, '10': 'latitude'},
const {'1': 'longitude', '3': 6, '4': 1, '5': 17, '10': 'longitude'},
],
'4': const [Location_Country$json],
};
const Location_Country$json = const {
'1': 'Country',
'2': const [
const {'1': 'UNKNOWN_COUNTRY', '2': 0},
const {'1': 'AF', '2': 1},
const {'1': 'AX', '2': 2},
const {'1': 'AL', '2': 3},
const {'1': 'DZ', '2': 4},
const {'1': 'AS', '2': 5},
const {'1': 'AD', '2': 6},
const {'1': 'AO', '2': 7},
const {'1': 'AI', '2': 8},
const {'1': 'AQ', '2': 9},
const {'1': 'AG', '2': 10},
const {'1': 'AR', '2': 11},
const {'1': 'AM', '2': 12},
const {'1': 'AW', '2': 13},
const {'1': 'AU', '2': 14},
const {'1': 'AT', '2': 15},
const {'1': 'AZ', '2': 16},
const {'1': 'BS', '2': 17},
const {'1': 'BH', '2': 18},
const {'1': 'BD', '2': 19},
const {'1': 'BB', '2': 20},
const {'1': 'BY', '2': 21},
const {'1': 'BE', '2': 22},
const {'1': 'BZ', '2': 23},
const {'1': 'BJ', '2': 24},
const {'1': 'BM', '2': 25},
const {'1': 'BT', '2': 26},
const {'1': 'BO', '2': 27},
const {'1': 'BQ', '2': 28},
const {'1': 'BA', '2': 29},
const {'1': 'BW', '2': 30},
const {'1': 'BV', '2': 31},
const {'1': 'BR', '2': 32},
const {'1': 'IO', '2': 33},
const {'1': 'BN', '2': 34},
const {'1': 'BG', '2': 35},
const {'1': 'BF', '2': 36},
const {'1': 'BI', '2': 37},
const {'1': 'KH', '2': 38},
const {'1': 'CM', '2': 39},
const {'1': 'CA', '2': 40},
const {'1': 'CV', '2': 41},
const {'1': 'KY', '2': 42},
const {'1': 'CF', '2': 43},
const {'1': 'TD', '2': 44},
const {'1': 'CL', '2': 45},
const {'1': 'CN', '2': 46},
const {'1': 'CX', '2': 47},
const {'1': 'CC', '2': 48},
const {'1': 'CO', '2': 49},
const {'1': 'KM', '2': 50},
const {'1': 'CG', '2': 51},
const {'1': 'CD', '2': 52},
const {'1': 'CK', '2': 53},
const {'1': 'CR', '2': 54},
const {'1': 'CI', '2': 55},
const {'1': 'HR', '2': 56},
const {'1': 'CU', '2': 57},
const {'1': 'CW', '2': 58},
const {'1': 'CY', '2': 59},
const {'1': 'CZ', '2': 60},
const {'1': 'DK', '2': 61},
const {'1': 'DJ', '2': 62},
const {'1': 'DM', '2': 63},
const {'1': 'DO', '2': 64},
const {'1': 'EC', '2': 65},
const {'1': 'EG', '2': 66},
const {'1': 'SV', '2': 67},
const {'1': 'GQ', '2': 68},
const {'1': 'ER', '2': 69},
const {'1': 'EE', '2': 70},
const {'1': 'ET', '2': 71},
const {'1': 'FK', '2': 72},
const {'1': 'FO', '2': 73},
const {'1': 'FJ', '2': 74},
const {'1': 'FI', '2': 75},
const {'1': 'FR', '2': 76},
const {'1': 'GF', '2': 77},
const {'1': 'PF', '2': 78},
const {'1': 'TF', '2': 79},
const {'1': 'GA', '2': 80},
const {'1': 'GM', '2': 81},
const {'1': 'GE', '2': 82},
const {'1': 'DE', '2': 83},
const {'1': 'GH', '2': 84},
const {'1': 'GI', '2': 85},
const {'1': 'GR', '2': 86},
const {'1': 'GL', '2': 87},
const {'1': 'GD', '2': 88},
const {'1': 'GP', '2': 89},
const {'1': 'GU', '2': 90},
const {'1': 'GT', '2': 91},
const {'1': 'GG', '2': 92},
const {'1': 'GN', '2': 93},
const {'1': 'GW', '2': 94},
const {'1': 'GY', '2': 95},
const {'1': 'HT', '2': 96},
const {'1': 'HM', '2': 97},
const {'1': 'VA', '2': 98},
const {'1': 'HN', '2': 99},
const {'1': 'HK', '2': 100},
const {'1': 'HU', '2': 101},
const {'1': 'IS', '2': 102},
const {'1': 'IN', '2': 103},
const {'1': 'ID', '2': 104},
const {'1': 'IR', '2': 105},
const {'1': 'IQ', '2': 106},
const {'1': 'IE', '2': 107},
const {'1': 'IM', '2': 108},
const {'1': 'IL', '2': 109},
const {'1': 'IT', '2': 110},
const {'1': 'JM', '2': 111},
const {'1': 'JP', '2': 112},
const {'1': 'JE', '2': 113},
const {'1': 'JO', '2': 114},
const {'1': 'KZ', '2': 115},
const {'1': 'KE', '2': 116},
const {'1': 'KI', '2': 117},
const {'1': 'KP', '2': 118},
const {'1': 'KR', '2': 119},
const {'1': 'KW', '2': 120},
const {'1': 'KG', '2': 121},
const {'1': 'LA', '2': 122},
const {'1': 'LV', '2': 123},
const {'1': 'LB', '2': 124},
const {'1': 'LS', '2': 125},
const {'1': 'LR', '2': 126},
const {'1': 'LY', '2': 127},
const {'1': 'LI', '2': 128},
const {'1': 'LT', '2': 129},
const {'1': 'LU', '2': 130},
const {'1': 'MO', '2': 131},
const {'1': 'MK', '2': 132},
const {'1': 'MG', '2': 133},
const {'1': 'MW', '2': 134},
const {'1': 'MY', '2': 135},
const {'1': 'MV', '2': 136},
const {'1': 'ML', '2': 137},
const {'1': 'MT', '2': 138},
const {'1': 'MH', '2': 139},
const {'1': 'MQ', '2': 140},
const {'1': 'MR', '2': 141},
const {'1': 'MU', '2': 142},
const {'1': 'YT', '2': 143},
const {'1': 'MX', '2': 144},
const {'1': 'FM', '2': 145},
const {'1': 'MD', '2': 146},
const {'1': 'MC', '2': 147},
const {'1': 'MN', '2': 148},
const {'1': 'ME', '2': 149},
const {'1': 'MS', '2': 150},
const {'1': 'MA', '2': 151},
const {'1': 'MZ', '2': 152},
const {'1': 'MM', '2': 153},
const {'1': 'NA', '2': 154},
const {'1': 'NR', '2': 155},
const {'1': 'NP', '2': 156},
const {'1': 'NL', '2': 157},
const {'1': 'NC', '2': 158},
const {'1': 'NZ', '2': 159},
const {'1': 'NI', '2': 160},
const {'1': 'NE', '2': 161},
const {'1': 'NG', '2': 162},
const {'1': 'NU', '2': 163},
const {'1': 'NF', '2': 164},
const {'1': 'MP', '2': 165},
const {'1': 'NO', '2': 166},
const {'1': 'OM', '2': 167},
const {'1': 'PK', '2': 168},
const {'1': 'PW', '2': 169},
const {'1': 'PS', '2': 170},
const {'1': 'PA', '2': 171},
const {'1': 'PG', '2': 172},
const {'1': 'PY', '2': 173},
const {'1': 'PE', '2': 174},
const {'1': 'PH', '2': 175},
const {'1': 'PN', '2': 176},
const {'1': 'PL', '2': 177},
const {'1': 'PT', '2': 178},
const {'1': 'PR', '2': 179},
const {'1': 'QA', '2': 180},
const {'1': 'RE', '2': 181},
const {'1': 'RO', '2': 182},
const {'1': 'RU', '2': 183},
const {'1': 'RW', '2': 184},
const {'1': 'BL', '2': 185},
const {'1': 'SH', '2': 186},
const {'1': 'KN', '2': 187},
const {'1': 'LC', '2': 188},
const {'1': 'MF', '2': 189},
const {'1': 'PM', '2': 190},
const {'1': 'VC', '2': 191},
const {'1': 'WS', '2': 192},
const {'1': 'SM', '2': 193},
const {'1': 'ST', '2': 194},
const {'1': 'SA', '2': 195},
const {'1': 'SN', '2': 196},
const {'1': 'RS', '2': 197},
const {'1': 'SC', '2': 198},
const {'1': 'SL', '2': 199},
const {'1': 'SG', '2': 200},
const {'1': 'SX', '2': 201},
const {'1': 'SK', '2': 202},
const {'1': 'SI', '2': 203},
const {'1': 'SB', '2': 204},
const {'1': 'SO', '2': 205},
const {'1': 'ZA', '2': 206},
const {'1': 'GS', '2': 207},
const {'1': 'SS', '2': 208},
const {'1': 'ES', '2': 209},
const {'1': 'LK', '2': 210},
const {'1': 'SD', '2': 211},
const {'1': 'SR', '2': 212},
const {'1': 'SJ', '2': 213},
const {'1': 'SZ', '2': 214},
const {'1': 'SE', '2': 215},
const {'1': 'CH', '2': 216},
const {'1': 'SY', '2': 217},
const {'1': 'TW', '2': 218},
const {'1': 'TJ', '2': 219},
const {'1': 'TZ', '2': 220},
const {'1': 'TH', '2': 221},
const {'1': 'TL', '2': 222},
const {'1': 'TG', '2': 223},
const {'1': 'TK', '2': 224},
const {'1': 'TO', '2': 225},
const {'1': 'TT', '2': 226},
const {'1': 'TN', '2': 227},
const {'1': 'TR', '2': 228},
const {'1': 'TM', '2': 229},
const {'1': 'TC', '2': 230},
const {'1': 'TV', '2': 231},
const {'1': 'UG', '2': 232},
const {'1': 'UA', '2': 233},
const {'1': 'AE', '2': 234},
const {'1': 'GB', '2': 235},
const {'1': 'US', '2': 236},
const {'1': 'UM', '2': 237},
const {'1': 'UY', '2': 238},
const {'1': 'UZ', '2': 239},
const {'1': 'VU', '2': 240},
const {'1': 'VE', '2': 241},
const {'1': 'VN', '2': 242},
const {'1': 'VG', '2': 243},
const {'1': 'VI', '2': 244},
const {'1': 'WF', '2': 245},
const {'1': 'EH', '2': 246},
const {'1': 'YE', '2': 247},
const {'1': 'ZM', '2': 248},
const {'1': 'ZW', '2': 249},
],
};

View file

@ -0,0 +1,8 @@
///
// Generated code. Do not modify.
// source: claim.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
export 'claim.pb.dart';

View file

@ -0,0 +1,260 @@
///
// Generated code. Do not modify.
// source: result.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
import 'dart:core' as $core show bool, Deprecated, double, int, List, Map, override, pragma, String;
import 'package:fixnum/fixnum.dart';
import 'package:protobuf/protobuf.dart' as $pb;
import 'result.pbenum.dart';
export 'result.pbenum.dart';
class Outputs extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Outputs', package: const $pb.PackageName('pb'))
..pc<Output>(1, 'txos', $pb.PbFieldType.PM,Output.create)
..pc<Output>(2, 'extraTxos', $pb.PbFieldType.PM,Output.create)
..a<$core.int>(3, 'total', $pb.PbFieldType.OU3)
..a<$core.int>(4, 'offset', $pb.PbFieldType.OU3)
..hasRequiredFields = false
;
Outputs._() : super();
factory Outputs() => create();
factory Outputs.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Outputs.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Outputs clone() => Outputs()..mergeFromMessage(this);
Outputs copyWith(void Function(Outputs) updates) => super.copyWith((message) => updates(message as Outputs));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Outputs create() => Outputs._();
Outputs createEmptyInstance() => create();
static $pb.PbList<Outputs> createRepeated() => $pb.PbList<Outputs>();
static Outputs getDefault() => _defaultInstance ??= create()..freeze();
static Outputs _defaultInstance;
$core.List<Output> get txos => $_getList(0);
$core.List<Output> get extraTxos => $_getList(1);
$core.int get total => $_get(2, 0);
set total($core.int v) { $_setUnsignedInt32(2, v); }
$core.bool hasTotal() => $_has(2);
void clearTotal() => clearField(3);
$core.int get offset => $_get(3, 0);
set offset($core.int v) { $_setUnsignedInt32(3, v); }
$core.bool hasOffset() => $_has(3);
void clearOffset() => clearField(4);
}
enum Output_Meta {
claim,
error,
notSet
}
class Output extends $pb.GeneratedMessage {
static const $core.Map<$core.int, Output_Meta> _Output_MetaByTag = {
7 : Output_Meta.claim,
15 : Output_Meta.error,
0 : Output_Meta.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Output', package: const $pb.PackageName('pb'))
..oo(0, [7, 15])
..a<$core.List<$core.int>>(1, 'txHash', $pb.PbFieldType.OY)
..a<$core.int>(2, 'nout', $pb.PbFieldType.OU3)
..a<$core.int>(3, 'height', $pb.PbFieldType.OU3)
..a<ClaimMeta>(7, 'claim', $pb.PbFieldType.OM, ClaimMeta.getDefault, ClaimMeta.create)
..a<Error>(15, 'error', $pb.PbFieldType.OM, Error.getDefault, Error.create)
..hasRequiredFields = false
;
Output._() : super();
factory Output() => create();
factory Output.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Output.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Output clone() => Output()..mergeFromMessage(this);
Output copyWith(void Function(Output) updates) => super.copyWith((message) => updates(message as Output));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Output create() => Output._();
Output createEmptyInstance() => create();
static $pb.PbList<Output> createRepeated() => $pb.PbList<Output>();
static Output getDefault() => _defaultInstance ??= create()..freeze();
static Output _defaultInstance;
Output_Meta whichMeta() => _Output_MetaByTag[$_whichOneof(0)];
void clearMeta() => clearField($_whichOneof(0));
$core.List<$core.int> get txHash => $_getN(0);
set txHash($core.List<$core.int> v) { $_setBytes(0, v); }
$core.bool hasTxHash() => $_has(0);
void clearTxHash() => clearField(1);
$core.int get nout => $_get(1, 0);
set nout($core.int v) { $_setUnsignedInt32(1, v); }
$core.bool hasNout() => $_has(1);
void clearNout() => clearField(2);
$core.int get height => $_get(2, 0);
set height($core.int v) { $_setUnsignedInt32(2, v); }
$core.bool hasHeight() => $_has(2);
void clearHeight() => clearField(3);
ClaimMeta get claim => $_getN(3);
set claim(ClaimMeta v) { setField(7, v); }
$core.bool hasClaim() => $_has(3);
void clearClaim() => clearField(7);
Error get error => $_getN(4);
set error(Error v) { setField(15, v); }
$core.bool hasError() => $_has(4);
void clearError() => clearField(15);
}
class ClaimMeta extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClaimMeta', package: const $pb.PackageName('pb'))
..a<Output>(1, 'channel', $pb.PbFieldType.OM, Output.getDefault, Output.create)
..aOS(2, 'shortUrl')
..aOS(3, 'canonicalUrl')
..aOB(4, 'isControlling')
..a<$core.int>(5, 'takeOverHeight', $pb.PbFieldType.OU3)
..a<$core.int>(6, 'creationHeight', $pb.PbFieldType.OU3)
..a<$core.int>(7, 'activationHeight', $pb.PbFieldType.OU3)
..a<$core.int>(8, 'expirationHeight', $pb.PbFieldType.OU3)
..a<$core.int>(9, 'claimsInChannel', $pb.PbFieldType.OU3)
..a<Int64>(10, 'effectiveAmount', $pb.PbFieldType.OU6, Int64.ZERO)
..a<Int64>(11, 'supportAmount', $pb.PbFieldType.OU6, Int64.ZERO)
..a<$core.int>(12, 'trendingGroup', $pb.PbFieldType.OU3)
..a<$core.double>(13, 'trendingMixed', $pb.PbFieldType.OF)
..a<$core.double>(14, 'trendingLocal', $pb.PbFieldType.OF)
..a<$core.double>(15, 'trendingGlobal', $pb.PbFieldType.OF)
..hasRequiredFields = false
;
ClaimMeta._() : super();
factory ClaimMeta() => create();
factory ClaimMeta.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ClaimMeta.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
ClaimMeta clone() => ClaimMeta()..mergeFromMessage(this);
ClaimMeta copyWith(void Function(ClaimMeta) updates) => super.copyWith((message) => updates(message as ClaimMeta));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClaimMeta create() => ClaimMeta._();
ClaimMeta createEmptyInstance() => create();
static $pb.PbList<ClaimMeta> createRepeated() => $pb.PbList<ClaimMeta>();
static ClaimMeta getDefault() => _defaultInstance ??= create()..freeze();
static ClaimMeta _defaultInstance;
Output get channel => $_getN(0);
set channel(Output v) { setField(1, v); }
$core.bool hasChannel() => $_has(0);
void clearChannel() => clearField(1);
$core.String get shortUrl => $_getS(1, '');
set shortUrl($core.String v) { $_setString(1, v); }
$core.bool hasShortUrl() => $_has(1);
void clearShortUrl() => clearField(2);
$core.String get canonicalUrl => $_getS(2, '');
set canonicalUrl($core.String v) { $_setString(2, v); }
$core.bool hasCanonicalUrl() => $_has(2);
void clearCanonicalUrl() => clearField(3);
$core.bool get isControlling => $_get(3, false);
set isControlling($core.bool v) { $_setBool(3, v); }
$core.bool hasIsControlling() => $_has(3);
void clearIsControlling() => clearField(4);
$core.int get takeOverHeight => $_get(4, 0);
set takeOverHeight($core.int v) { $_setUnsignedInt32(4, v); }
$core.bool hasTakeOverHeight() => $_has(4);
void clearTakeOverHeight() => clearField(5);
$core.int get creationHeight => $_get(5, 0);
set creationHeight($core.int v) { $_setUnsignedInt32(5, v); }
$core.bool hasCreationHeight() => $_has(5);
void clearCreationHeight() => clearField(6);
$core.int get activationHeight => $_get(6, 0);
set activationHeight($core.int v) { $_setUnsignedInt32(6, v); }
$core.bool hasActivationHeight() => $_has(6);
void clearActivationHeight() => clearField(7);
$core.int get expirationHeight => $_get(7, 0);
set expirationHeight($core.int v) { $_setUnsignedInt32(7, v); }
$core.bool hasExpirationHeight() => $_has(7);
void clearExpirationHeight() => clearField(8);
$core.int get claimsInChannel => $_get(8, 0);
set claimsInChannel($core.int v) { $_setUnsignedInt32(8, v); }
$core.bool hasClaimsInChannel() => $_has(8);
void clearClaimsInChannel() => clearField(9);
Int64 get effectiveAmount => $_getI64(9);
set effectiveAmount(Int64 v) { $_setInt64(9, v); }
$core.bool hasEffectiveAmount() => $_has(9);
void clearEffectiveAmount() => clearField(10);
Int64 get supportAmount => $_getI64(10);
set supportAmount(Int64 v) { $_setInt64(10, v); }
$core.bool hasSupportAmount() => $_has(10);
void clearSupportAmount() => clearField(11);
$core.int get trendingGroup => $_get(11, 0);
set trendingGroup($core.int v) { $_setUnsignedInt32(11, v); }
$core.bool hasTrendingGroup() => $_has(11);
void clearTrendingGroup() => clearField(12);
$core.double get trendingMixed => $_getN(12);
set trendingMixed($core.double v) { $_setFloat(12, v); }
$core.bool hasTrendingMixed() => $_has(12);
void clearTrendingMixed() => clearField(13);
$core.double get trendingLocal => $_getN(13);
set trendingLocal($core.double v) { $_setFloat(13, v); }
$core.bool hasTrendingLocal() => $_has(13);
void clearTrendingLocal() => clearField(14);
$core.double get trendingGlobal => $_getN(14);
set trendingGlobal($core.double v) { $_setFloat(14, v); }
$core.bool hasTrendingGlobal() => $_has(14);
void clearTrendingGlobal() => clearField(15);
}
class Error extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('Error', package: const $pb.PackageName('pb'))
..e<Error_Code>(1, 'code', $pb.PbFieldType.OE, Error_Code.UNKNOWN_CODE, Error_Code.valueOf, Error_Code.values)
..aOS(2, 'text')
..hasRequiredFields = false
;
Error._() : super();
factory Error() => create();
factory Error.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory Error.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
Error clone() => Error()..mergeFromMessage(this);
Error copyWith(void Function(Error) updates) => super.copyWith((message) => updates(message as Error));
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Error create() => Error._();
Error createEmptyInstance() => create();
static $pb.PbList<Error> createRepeated() => $pb.PbList<Error>();
static Error getDefault() => _defaultInstance ??= create()..freeze();
static Error _defaultInstance;
Error_Code get code => $_getN(0);
set code(Error_Code v) { setField(1, v); }
$core.bool hasCode() => $_has(0);
void clearCode() => clearField(1);
$core.String get text => $_getS(1, '');
set text($core.String v) { $_setString(1, v); }
$core.bool hasText() => $_has(1);
void clearText() => clearField(2);
}

View file

@ -0,0 +1,27 @@
///
// Generated code. Do not modify.
// source: result.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
// ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
import 'dart:core' as $core show int, dynamic, String, List, Map;
import 'package:protobuf/protobuf.dart' as $pb;
class Error_Code extends $pb.ProtobufEnum {
static const Error_Code UNKNOWN_CODE = Error_Code._(0, 'UNKNOWN_CODE');
static const Error_Code NOT_FOUND = Error_Code._(1, 'NOT_FOUND');
static const Error_Code INVALID = Error_Code._(2, 'INVALID');
static const $core.List<Error_Code> values = <Error_Code> [
UNKNOWN_CODE,
NOT_FOUND,
INVALID,
];
static final $core.Map<$core.int, Error_Code> _byValue = $pb.ProtobufEnum.initByValue(values);
static Error_Code valueOf($core.int value) => _byValue[value];
const Error_Code._($core.int v, $core.String n) : super(v, n);
}

View file

@ -0,0 +1,69 @@
///
// Generated code. Do not modify.
// source: result.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
const Outputs$json = const {
'1': 'Outputs',
'2': const [
const {'1': 'txos', '3': 1, '4': 3, '5': 11, '6': '.pb.Output', '10': 'txos'},
const {'1': 'extra_txos', '3': 2, '4': 3, '5': 11, '6': '.pb.Output', '10': 'extraTxos'},
const {'1': 'total', '3': 3, '4': 1, '5': 13, '10': 'total'},
const {'1': 'offset', '3': 4, '4': 1, '5': 13, '10': 'offset'},
],
};
const Output$json = const {
'1': 'Output',
'2': const [
const {'1': 'tx_hash', '3': 1, '4': 1, '5': 12, '10': 'txHash'},
const {'1': 'nout', '3': 2, '4': 1, '5': 13, '10': 'nout'},
const {'1': 'height', '3': 3, '4': 1, '5': 13, '10': 'height'},
const {'1': 'claim', '3': 7, '4': 1, '5': 11, '6': '.pb.ClaimMeta', '9': 0, '10': 'claim'},
const {'1': 'error', '3': 15, '4': 1, '5': 11, '6': '.pb.Error', '9': 0, '10': 'error'},
],
'8': const [
const {'1': 'meta'},
],
};
const ClaimMeta$json = const {
'1': 'ClaimMeta',
'2': const [
const {'1': 'channel', '3': 1, '4': 1, '5': 11, '6': '.pb.Output', '10': 'channel'},
const {'1': 'short_url', '3': 2, '4': 1, '5': 9, '10': 'shortUrl'},
const {'1': 'canonical_url', '3': 3, '4': 1, '5': 9, '10': 'canonicalUrl'},
const {'1': 'is_controlling', '3': 4, '4': 1, '5': 8, '10': 'isControlling'},
const {'1': 'take_over_height', '3': 5, '4': 1, '5': 13, '10': 'takeOverHeight'},
const {'1': 'creation_height', '3': 6, '4': 1, '5': 13, '10': 'creationHeight'},
const {'1': 'activation_height', '3': 7, '4': 1, '5': 13, '10': 'activationHeight'},
const {'1': 'expiration_height', '3': 8, '4': 1, '5': 13, '10': 'expirationHeight'},
const {'1': 'claims_in_channel', '3': 9, '4': 1, '5': 13, '10': 'claimsInChannel'},
const {'1': 'effective_amount', '3': 10, '4': 1, '5': 4, '10': 'effectiveAmount'},
const {'1': 'support_amount', '3': 11, '4': 1, '5': 4, '10': 'supportAmount'},
const {'1': 'trending_group', '3': 12, '4': 1, '5': 13, '10': 'trendingGroup'},
const {'1': 'trending_mixed', '3': 13, '4': 1, '5': 2, '10': 'trendingMixed'},
const {'1': 'trending_local', '3': 14, '4': 1, '5': 2, '10': 'trendingLocal'},
const {'1': 'trending_global', '3': 15, '4': 1, '5': 2, '10': 'trendingGlobal'},
],
};
const Error$json = const {
'1': 'Error',
'2': const [
const {'1': 'code', '3': 1, '4': 1, '5': 14, '6': '.pb.Error.Code', '10': 'code'},
const {'1': 'text', '3': 2, '4': 1, '5': 9, '10': 'text'},
],
'4': const [Error_Code$json],
};
const Error_Code$json = const {
'1': 'Code',
'2': const [
const {'1': 'UNKNOWN_CODE', '2': 0},
const {'1': 'NOT_FOUND', '2': 1},
const {'1': 'INVALID', '2': 2},
],
};

View file

@ -0,0 +1,8 @@
///
// Generated code. Do not modify.
// source: result.proto
///
// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type
export 'result.pb.dart';

View file

@ -0,0 +1,376 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "0.36.4"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.2"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.11"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
csslib:
dependency: transitive
description:
name: csslib
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.0"
dart_style:
dependency: transitive
description:
name: dart_style
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.8"
fixnum:
dependency: transitive
description:
name: fixnum
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.9"
front_end:
dependency: transitive
description:
name: front_end
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.19"
glob:
dependency: transitive
description:
name: glob
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.7"
html:
dependency: transitive
description:
name: html
url: "https://pub.dartlang.org"
source: hosted
version: "0.14.0+2"
http:
dependency: "direct main"
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.0+2"
http_multi_server:
dependency: transitive
description:
name: http_multi_server
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.3"
io:
dependency: transitive
description:
name: io
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.3"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.1+1"
json_rpc_2:
dependency: transitive
description:
name: json_rpc_2
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
kernel:
dependency: transitive
description:
name: kernel
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.19"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.5"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.7"
mime:
dependency: transitive
description:
name: mime
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.6+3"
multi_server_socket:
dependency: transitive
description:
name: multi_server_socket
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
node_preamble:
dependency: transitive
description:
name: node_preamble
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.4"
package_config:
dependency: transitive
description:
name: package_config
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
package_resolver:
dependency: transitive
description:
name: package_resolver
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.10"
path:
dependency: "direct main"
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.2"
pedantic:
dependency: "direct dev"
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
pool:
dependency: transitive
description:
name: pool
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.0"
protobuf:
dependency: "direct main"
description:
name: protobuf
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.12"
protoc_plugin:
dependency: "direct dev"
description:
name: protoc_plugin
url: "https://pub.dartlang.org"
source: hosted
version: "17.0.2"
pub_semver:
dependency: transitive
description:
name: pub_semver
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.2"
shelf:
dependency: transitive
description:
name: shelf
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.5"
shelf_packages_handler:
dependency: transitive
description:
name: shelf_packages_handler
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
shelf_static:
dependency: transitive
description:
name: shelf_static
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.8"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.3"
source_map_stack_trace:
dependency: transitive
description:
name: source_map_stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.5"
source_maps:
dependency: transitive
description:
name: source_maps
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.8"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.5"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
test:
dependency: "direct dev"
description:
name: test
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.4"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.6"
test_core:
dependency: transitive
description:
name: test_core
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.6"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
vm_service_client:
dependency: transitive
description:
name: vm_service_client
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.6+2"
watcher:
dependency: transitive
description:
name: watcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.7+10"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.13"
yaml:
dependency: transitive
description:
name: yaml
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.16"
sdks:
dart: ">=2.3.0 <3.0.0"

View file

@ -0,0 +1,18 @@
name: lbry
description: LBRY SDK in Dart.
version: 0.0.1
homepage: https://lbry.com
author: LBRY Inc. <hello@lbry.com>
environment:
sdk: '>=2.2.0 <3.0.0'
dependencies:
http: ^0.12.0+2
path: ^1.4.1
protobuf: ^0.13.12
dev_dependencies:
pedantic: ^1.0.0
test: ^1.0.0
protoc_plugin: ^17.0.2

View file

@ -0,0 +1,8 @@
import 'package:lbry/lbry.dart';
import 'package:test/test.dart';
void main() {
test('calculate', () {
expect(calculate(), 42);
});
}

72
dart/packages/ver/.gitignore vendored Normal file
View file

@ -0,0 +1,72 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.packages
.pub-cache/
.pub/
/build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages

View file

@ -0,0 +1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 871b58986d6d401efb8dd66af67814bf37c42cd1
channel: master
project_type: app

View file

@ -0,0 +1,16 @@
# ver
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

View file

@ -0,0 +1,61 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.lbry.ver"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

View file

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lbry.ver">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View file

@ -0,0 +1,33 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lbry.ver">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="ver"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>

View file

@ -0,0 +1,13 @@
package com.lbry.ver;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
</resources>

View file

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lbry.ver">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View file

@ -0,0 +1,29 @@
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}

View file

@ -0,0 +1,2 @@
org.gradle.jvmargs=-Xmx1536M

View file

@ -0,0 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip

View file

@ -0,0 +1,15 @@
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}

View file

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>

View file

@ -0,0 +1 @@
#include "Generated.xcconfig"

View file

@ -0,0 +1 @@
#include "Generated.xcconfig"

View file

@ -0,0 +1,519 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B80C3931E831B6300D905FE /* App.framework */,
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEBA1CF902C7004384FC /* Flutter.framework */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 0910;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.lbry.ver;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 4.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.lbry.ver;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.lbry.ver;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 4.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

View file

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

View file

@ -0,0 +1,13 @@
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}

View file

@ -0,0 +1,122 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

View file

@ -0,0 +1,5 @@
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

View file

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>ver</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

View file

@ -0,0 +1 @@
#import "GeneratedPluginRegistrant.h"

View file

@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart' show debugDefaultTargetPlatformOverride;
import 'package:ver/utils.dart';
import 'package:ver/time_series_chart.dart';
class VerApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Ver',
theme: ThemeData(
brightness: Brightness.light,
primarySwatch: Colors.lightBlue,
fontFamily: 'Roboto',
),
home: VerHomePage(title: 'Wallet Server'),
);
}
}
class VerHomePage extends StatefulWidget {
VerHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_VerHomePageState createState() => _VerHomePageState();
}
class _VerHomePageState extends State<VerHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: new Padding(
padding: const EdgeInsets.all(8.0),
child: SimpleTimeSeriesChart()
),
);
}
}
void main() {
debugDefaultTargetPlatformOverride = getTargetPlatformForDesktop();
runApp(new VerApp());
}

View file

@ -0,0 +1,149 @@
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:charts_flutter/src/base_chart_state.dart' as state;
import 'package:charts_common/common.dart' as common;
import 'package:lbry/lbry.dart';
class SimpleTimeSeriesChart extends StatefulWidget {
SimpleTimeSeriesChart({Key key}) : super(key: key);
@override
_SimpleTimeSeriesChartState createState() => _SimpleTimeSeriesChartState();
}
class _SimpleTimeSeriesChartState extends State<SimpleTimeSeriesChart> {
final List<LoadDataPoint> loadData = [];
final List<charts.Series<LoadDataPoint, DateTime>> loadSeries = [];
final List<charts.Series<LoadDataPoint, DateTime>> timeSeries = [];
final Random rand = Random();
LoadGenerator loadGenerator;
@override
void initState() {
super.initState();
loadSeries.add(
charts.Series<LoadDataPoint, DateTime>(
id: 'Load',
colorFn: (_, __) => charts.MaterialPalette.black.darker,
domainFn: (LoadDataPoint load, _) => load.time,
measureFn: (LoadDataPoint load, _) => load.load,
data: loadData,
)
);
loadSeries.add(
charts.Series<LoadDataPoint, DateTime>(
id: 'Success',
colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault,
domainFn: (LoadDataPoint load, _) => load.time,
measureFn: (LoadDataPoint load, _) => load.success,
data: loadData,
)
);
loadSeries.add(
charts.Series<LoadDataPoint, DateTime>(
id: 'Backlog',
colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
domainFn: (LoadDataPoint load, _) => load.time,
measureFn: (LoadDataPoint load, _) => load.backlog,
data: loadData,
)
);
loadSeries.add(
charts.Series<LoadDataPoint, DateTime>(
id: 'Catch-up',
colorFn: (_, __) => charts.MaterialPalette.yellow.shadeDefault,
domainFn: (LoadDataPoint load, _) => load.time,
measureFn: (LoadDataPoint load, _) => load.catchup,
data: loadData,
)
);
timeSeries.add(
charts.Series<LoadDataPoint, DateTime>(
id: 'Avg. Success Time',
colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault,
domainFn: (LoadDataPoint load, _) => load.time,
measureFn: (LoadDataPoint load, _) => load.avg_success,
data: loadData,
)
);
timeSeries.add(
charts.Series<LoadDataPoint, DateTime>(
id: 'Avg. Catch-up Time',
colorFn: (_, __) => charts.MaterialPalette.yellow.shadeDefault,
domainFn: (LoadDataPoint load, _) => load.time,
measureFn: (LoadDataPoint load, _) => load.avg_catchup,
data: loadData,
)
);
var increase = 1;
loadData.add(LoadDataPoint());
loadGenerator = LoadGenerator('spv2.lbry.com', 50001, {
'id': 1,
'method': 'blockchain.claimtrie.search',
'params': {
'offset': 0,
'limit': 20,
'fee_amount': '<1',
'all_tags': ['funny'],
'any_tags': [
'crypto',
'outdoors',
'cars',
'automotive'
]
}
}, (t, stats) {
setState(() {
//if (loadData.length > 60) loadData.removeAt(0);
loadData.add(stats);
});
//increase = max(1, min(30, (increase*1.1).ceil())-stats.backlog);
increase += 1;
//t.query['params']['offset'] = (increase/2).ceil()*t.query['params']['limit'];
t.load = increase;//rand.nextInt(10)+5;
return true;
})..start();
}
@override
void dispose() {
loadGenerator.stop();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
SizedBox(height: 250.0, child: BetterTimeSeriesChart(loadSeries)),
SizedBox(height: 250.0, child: BetterTimeSeriesChart(timeSeries)),
]);
}
}
class BetterTimeSeriesChart extends charts.TimeSeriesChart {
final int itemCount;
final Object lastItem;
BetterTimeSeriesChart(
List<charts.Series<dynamic, DateTime>> seriesList):
itemCount = seriesList[0].data.length,
lastItem = seriesList[0].data.last,
super(seriesList, behaviors: [charts.SeriesLegend()]);
@override
void updateCommonChart(common.BaseChart baseChart, charts.BaseChart oldWidget,
state.BaseChartState chartState) {
super.updateCommonChart(baseChart, oldWidget, chartState);
final prev = oldWidget as BetterTimeSeriesChart;
if (itemCount != prev?.itemCount || lastItem != prev?.lastItem) {
chartState.markChartDirty();
}
}
}

View file

@ -0,0 +1,13 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
TargetPlatform getTargetPlatformForDesktop() {
// See https://github.com/flutter/flutter/wiki/Desktop-shells#target-platform-override
if (Platform.isMacOS || Platform.isIOS) {
return TargetPlatform.iOS;
} else if (Platform.isAndroid) {
return TargetPlatform.android;
}
return TargetPlatform.fuchsia;
}

1
dart/packages/ver/linux/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
flutter/

View file

@ -0,0 +1,127 @@
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Example-specific variables.
# To modify this Makefile for a different application, these are the values
# that are mostly likely to need to be changed.
# Executable name.
BINARY_NAME=flutter_desktop_example
# The C++ code for the embedder application.
SOURCES=flutter_embedder_example.cc
# Default build type. For a release build, set BUILD=release.
# Currently this only sets NDEBUG, which is used to control the flags passed
# to the Flutter engine in the example shell, and not the complation settings
# (e.g., optimization level) of the C++ code.
BUILD=debug
# Configuration provided via flutter tool.
include flutter/generated_config
# Dependency locations
FLUTTER_APP_CACHE_DIR=flutter/
FLUTTER_APP_DIR=$(CURDIR)/..
FLUTTER_APP_BUILD_DIR=$(FLUTTER_APP_DIR)/build
OUT_DIR=$(FLUTTER_APP_BUILD_DIR)/linux
# Libraries
FLUTTER_LIB_NAME=flutter_linux
FLUTTER_LIB=$(FLUTTER_APP_CACHE_DIR)/lib$(FLUTTER_LIB_NAME).so
# Tools
FLUTTER_BIN=$(FLUTTER_ROOT)/bin/flutter
LINUX_BUILD=$(FLUTTER_ROOT)/packages/flutter_tools/bin/linux_backend.sh
# Resources
ICU_DATA_NAME=icudtl.dat
ICU_DATA_SOURCE=$(FLUTTER_APP_CACHE_DIR)/$(ICU_DATA_NAME)
FLUTTER_ASSETS_NAME=flutter_assets
FLUTTER_ASSETS_SOURCE=$(FLUTTER_APP_BUILD_DIR)/$(FLUTTER_ASSETS_NAME)
# Bundle structure
BUNDLE_OUT_DIR=$(OUT_DIR)/$(BUILD)
BUNDLE_DATA_DIR=$(BUNDLE_OUT_DIR)/data
BUNDLE_LIB_DIR=$(BUNDLE_OUT_DIR)/lib
BIN_OUT=$(BUNDLE_OUT_DIR)/$(BINARY_NAME)
ICU_DATA_OUT=$(BUNDLE_DATA_DIR)/$(ICU_DATA_NAME)
FLUTTER_LIB_OUT=$(BUNDLE_LIB_DIR)/$(notdir $(FLUTTER_LIB))
# Add relevant code from the wrapper library, which is intended to be statically
# built into the client.
WRAPPER_ROOT=$(FLUTTER_APP_CACHE_DIR)/cpp_client_wrapper
WRAPPER_SOURCES= \
$(WRAPPER_ROOT)/flutter_window_controller.cc \
$(WRAPPER_ROOT)/plugin_registrar.cc \
$(WRAPPER_ROOT)/engine_method_result.cc
SOURCES+=$(WRAPPER_SOURCES)
# Headers
WRAPPER_INCLUDE_DIR=$(WRAPPER_ROOT)/include
INCLUDE_DIRS=$(FLUTTER_APP_CACHE_DIR) $(WRAPPER_INCLUDE_DIR)
# Build settings
CXX=clang++
CXXFLAGS.release=-DNDEBUG
CXXFLAGS=-std=c++14 -Wall -Werror $(CXXFLAGS.$(BUILD))
CPPFLAGS=$(patsubst %,-I%,$(INCLUDE_DIRS))
LDFLAGS=-L$(BUNDLE_LIB_DIR) \
-l$(FLUTTER_LIB_NAME) \
-Wl,-rpath=\$$ORIGIN/lib
# Targets
.PHONY: all
all: $(BIN_OUT) bundle
# This is a phony target because the flutter tool cannot describe
# its inputs and outputs yet.
.PHONY: sync
sync: flutter/generated_config
$(FLUTTER_ROOT)/packages/flutter_tools/bin/tool_backend.sh linux-x64 $(BUILD)
.PHONY: bundle
bundle: $(ICU_DATA_OUT) $(FLUTTER_LIB_OUT) bundleflutterassets
$(BIN_OUT): $(SOURCES) $(FLUTTER_LIB_OUT)
mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(SOURCES) $(LDFLAGS) -o $@
$(WRAPPER_SOURCES) $(FLUTTER_LIB) $(ICU_DATA_SOURCE) $(FLUTTER_ASSETS_SOURCE): \
| sync
$(FLUTTER_LIB_OUT): $(FLUTTER_LIB)
mkdir -p $(BUNDLE_LIB_DIR)
cp $(FLUTTER_LIB) $(BUNDLE_LIB_DIR)
$(ICU_DATA_OUT): $(ICU_DATA_SOURCE)
mkdir -p $(dir $(ICU_DATA_OUT))
cp $(ICU_DATA_SOURCE) $(ICU_DATA_OUT)
# Fully re-copy the assets directory on each build to avoid having to keep a
# comprehensive list of all asset files here, which would be fragile to changes
# in the Flutter example (e.g., adding a new font to pubspec.yaml would require
# changes here).
.PHONY: bundleflutterassets
bundleflutterassets: $(FLUTTER_ASSETS_SOURCE)
mkdir -p $(BUNDLE_DATA_DIR)
rsync -rpu --delete $(FLUTTER_ASSETS_SOURCE) $(BUNDLE_DATA_DIR)
.PHONY: clean
clean:
rm -rf $(OUT_DIR); \
cd $(FLUTTER_APP_DIR); \
$(FLUTTER_BIN) clean

View file

@ -0,0 +1,71 @@
// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <linux/limits.h>
#include <unistd.h>
#include <cstdlib>
#include <iostream>
#include <memory>
#include <vector>
#include <flutter/flutter_window_controller.h>
namespace {
// Returns the path of the directory containing this executable, or an empty
// string if the directory cannot be found.
std::string GetExecutableDirectory() {
char buffer[PATH_MAX + 1];
ssize_t length = readlink("/proc/self/exe", buffer, sizeof(buffer));
if (length > PATH_MAX) {
std::cerr << "Couldn't locate executable" << std::endl;
return "";
}
std::string executable_path(buffer, length);
size_t last_separator_position = executable_path.find_last_of('/');
if (last_separator_position == std::string::npos) {
std::cerr << "Unabled to find parent directory of " << executable_path
<< std::endl;
return "";
}
return executable_path.substr(0, last_separator_position);
}
} // namespace
int main(int argc, char **argv) {
// Resources are located relative to the executable.
std::string base_directory = GetExecutableDirectory();
if (base_directory.empty()) {
base_directory = ".";
}
std::string data_directory = base_directory + "/data";
std::string assets_path = data_directory + "/flutter_assets";
std::string icu_data_path = data_directory + "/icudtl.dat";
// Arguments for the Flutter Engine.
std::vector<std::string> arguments;
flutter::FlutterWindowController flutter_controller(icu_data_path);
// Start the engine.
if (!flutter_controller.CreateWindow(800, 600, "ver - lbry workbench",
assets_path, arguments)) {
return EXIT_FAILURE;
}
// Run until the window is closed.
flutter_controller.RunEventLoop();
return EXIT_SUCCESS;
}

View file

@ -0,0 +1,209 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
charts_common:
dependency: transitive
description:
name: charts_common
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
charts_flutter:
dependency: "direct main"
description:
name: charts_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.11"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
fixnum:
dependency: transitive
description:
name: fixnum
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.9"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
http:
dependency: transitive
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.0+2"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.3"
intl:
dependency: transitive
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.15.8"
lbry:
dependency: "direct main"
description:
path: "../lbry"
relative: true
source: path
version: "0.0.1"
logging:
dependency: transitive
description:
name: logging
url: "https://pub.dartlang.org"
source: hosted
version: "0.11.3+2"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.5"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.2"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0+1"
protobuf:
dependency: transitive
description:
name: protobuf
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.15"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.5"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.5"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
sdks:
dart: ">=2.2.2 <3.0.0"

View file

@ -0,0 +1,53 @@
name: ver
description: An app for LBRY.
version: 0.0.1+1
homepage: https://lbry.com
author: LBRY Inc. <hello@lbry.com>
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
charts_flutter: ^0.6.0
lbry:
path: ../lbry
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
# See https://github.com/flutter/flutter/wiki/Desktop-shells#fonts
fonts:
- family: Roboto
fonts:
- asset: fonts/Roboto/Roboto-Thin.ttf
weight: 100
- asset: fonts/Roboto/Roboto-Light.ttf
weight: 300
- asset: fonts/Roboto/Roboto-Regular.ttf
weight: 400
- asset: fonts/Roboto/Roboto-Medium.ttf
weight: 500
- asset: fonts/Roboto/Roboto-Bold.ttf
weight: 700
- asset: fonts/Roboto/Roboto-Black.ttf
weight: 900
- family: ""
fonts:
- asset: fonts/Roboto/Roboto-Thin.ttf
weight: 100
- asset: fonts/Roboto/Roboto-Light.ttf
weight: 300
- asset: fonts/Roboto/Roboto-Regular.ttf
weight: 400
- asset: fonts/Roboto/Roboto-Medium.ttf
weight: 500
- asset: fonts/Roboto/Roboto-Bold.ttf
weight: 700
- asset: fonts/Roboto/Roboto-Black.ttf
weight: 900

View file

@ -0,0 +1,30 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:ver/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}

332
dart/packages/ver/windows/.gitignore vendored Normal file
View file

@ -0,0 +1,332 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# Local additions, not from the link above
flutter/
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/

View file

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.645
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Runner", "Runner.vcxproj", "{5A827760-CF8B-408A-99A3-B6C0AD2271E7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Debug|x64.ActiveCfg = Debug|x64
{5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Debug|x64.Build.0 = Debug|x64
{5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Release|x64.ActiveCfg = Release|x64
{5A827760-CF8B-408A-99A3-B6C0AD2271E7}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B8A69CB0-A974-4774-9EBD-1E5EECACD186}
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{5A827760-CF8B-408A-99A3-B6C0AD2271E7}</ProjectGuid>
<RootNamespace>GLFWExample</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="flutter\Generated.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="flutter\Generated.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(ProjectDir)..\build\windows\$(Platform)\$(Configuration)\$(ProjectName)\</OutDir>
<IntDir>$(ProjectDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IncludePath>$(ProjectDir)flutter\;$(ProjectDir)flutter\cpp_client_wrapper\include\;$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)flutter;$(LibraryPath)</LibraryPath>
<TargetName>Flutter Desktop Example</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(ProjectDir)..\build\windows\$(Platform)\$(Configuration)\$(ProjectName)\</OutDir>
<IntDir>$(ProjectDir)..\build\windows\intermediates\$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IncludePath>$(ProjectDir)flutter\;$(ProjectDir)flutter\cpp_client_wrapper\include\;$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)flutter;$(LibraryPath)</LibraryPath>
<TargetName>Flutter Desktop Example</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>flutter_windows.dll.lib;opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PreBuildEvent>
<Command>"$(ProjectDir)scripts\prepare_dependencies" debug</Command>
<Message>Sync and build dependencies</Message>
</PreBuildEvent>
<PreLinkEvent>
<Command>
</Command>
<Message>
</Message>
</PreLinkEvent>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>
</Message>
</PostBuildEvent>
<CustomBuildStep>
<Command>"$(ProjectDir)scripts\bundle_assets_and_deps" "$(ProjectDir)flutter\" "$(OutputPath)" "$(TargetFileName)"</Command>
</CustomBuildStep>
<CustomBuildStep>
<Message>Bundling dependencies</Message>
<Outputs>Dummy_Run_Always</Outputs>
<Inputs>
</Inputs>
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>flutter_windows.dll.lib;opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PreBuildEvent>
<Command>"$(ProjectDir)scripts\prepare_dependencies" release</Command>
<Message>Sync and build dependencies</Message>
</PreBuildEvent>
<PreLinkEvent>
<Command>
</Command>
<Message>
</Message>
</PreLinkEvent>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>
</Message>
</PostBuildEvent>
<CustomBuildStep>
<Command>"$(ProjectDir)scripts\bundle_assets_and_deps" "$(ProjectDir)flutter\" "$(OutputPath)" "$(TargetFileName)"</Command>
</CustomBuildStep>
<CustomBuildStep>
<Message>Bundling dependencies</Message>
<Outputs>Dummy_Run_Always</Outputs>
<Inputs>
</Inputs>
</CustomBuildStep>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="$(ProjectDir)flutter\cpp_client_wrapper\engine_method_result.cc" />
<ClCompile Include="$(ProjectDir)flutter\cpp_client_wrapper\flutter_window_controller.cc" />
<ClCompile Include="$(ProjectDir)flutter\cpp_client_wrapper\plugin_registrar.cc" />
<ClCompile Include="flutter_embedder_example.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<PropertyGroup>
<LocalDebuggerWorkingDirectory>$(SolutionDir)</LocalDebuggerWorkingDirectory>
</PropertyGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show more