update over existing claim in publish()

This commit is contained in:
Jack 2016-08-04 23:08:54 -04:00
parent dfa68f126b
commit b0e14fae43
3 changed files with 28 additions and 35 deletions

View file

@ -396,19 +396,27 @@ class LBRYWallet(object):
d.addCallback(_get_id_for_return)
return d
def get_claim_info(self, name, force_good_metadata=True):
log.info("get claim info")
log.info(name)
log.info(force_good_metadata)
def get_claim_info(self, name, force_good_metadata=True, is_mine=False):
def _filter_my_claims(claim):
d = self.get_name_claims()
d.addCallback(lambda my_claims: claim if claim['txid'] in [c['txid'] for c in my_claims] else False)
return d
d = self._get_value_for_name(name)
d.addCallback(lambda r: self._get_claim_info(r, name, force_good_metadata))
d.addErrback(lambda _: False)
if is_mine:
d.addCallback(lambda claim: _filter_my_claims(claim) if claim is not False else False)
return d
def claim_name(self, name, bid, m):
metadata = Metadata(m)
d = self._send_name_claim(name, json.dumps(metadata), bid)
def _make_update(old_claim_info):
txid = old_claim_info['txid']
log.info("Updating from claim tx %s" % txid)
r = old_claim_info['value'] if isinstance(old_claim_info['value'], dict) else {}
for k in metadata:
r[k] = metadata[k]
return self.update_name(name, txid, json.dumps(Metadata(r)), bid)
def _save_metadata(txid):
log.info("Saving metadata for claim %s" % txid)
@ -416,6 +424,10 @@ class LBRYWallet(object):
d.addCallback(lambda _: txid)
return d
metadata = Metadata(m)
d = self.get_claim_info(name, force_good_metadata=False, is_mine=True)
d.addCallback(lambda r: _make_update(r) if r else self._send_name_claim(name, json.dumps(metadata), bid))
d.addCallback(_save_metadata)
return d
@ -577,10 +589,8 @@ class LBRYWallet(object):
return self.db.runInteraction(create_tables)
def _save_name_metadata(self, name, txid, sd_hash):
d = self.db.runQuery("select * from name_metadata where name=? and txid=? and sd_hash=?", (name, txid, sd_hash))
d.addCallback(lambda r: self.db.runQuery("insert into name_metadata values (?, ?, ?)", (name, txid, sd_hash))
if not len(r) else None)
d = self.db.runQuery("delete from name_metadata where name=? and txid=? and sd_hash=?", (name, txid, sd_hash))
d.addCallback(lambda _: self.db.runQuery("insert into name_metadata values (?, ?, ?)", (name, txid, sd_hash)))
return d
def _get_claim_metadata_for_sd_hash(self, sd_hash):
@ -596,7 +606,7 @@ class LBRYWallet(object):
def _get_claimid_for_tx(self, name, txid):
d = self.db.runQuery("select claimId from claim_ids where name=? and txid=?", (name, txid))
d.addCallback(lambda r: None if not r else r[0][0])
d.addCallback(lambda r: r[0][0] if r else None)
return d
######### Must be overridden #########

View file

@ -379,6 +379,7 @@ class LBRYDaemon(jsonrpc.JSONRPC):
log.info("Done writing lbrycrd.conf")
def _responseFailed(self, err, call):
log.error(err.getTraceback())
call.cancel()
def render(self, request):
@ -2010,12 +2011,6 @@ class LBRYDaemon(jsonrpc.JSONRPC):
metadata['fee'][currency]['address'] = address
return defer.succeed(None)
def _delete_data(lbry_file):
txid = lbry_file.txid
d = self._delete_lbry_file(lbry_file, delete_file=False)
d.addCallback(lambda _: txid)
return d
if not self.pending_claim_checker.running:
self.pending_claim_checker.start(30)
@ -2031,9 +2026,7 @@ class LBRYDaemon(jsonrpc.JSONRPC):
d.addCallback(lambda addr: _set_address(addr, c))
pub = Publisher(self.session, self.lbry_file_manager, self.session.wallet)
d.addCallback(lambda _: self._get_lbry_file_by_uri(name))
d.addCallbacks(lambda l: None if not l else _delete_data(l), lambda _: None)
d.addCallback(lambda r: pub.start(name, file_path, bid, metadata, r))
d.addCallback(lambda _: pub.start(name, file_path, bid, metadata))
d.addCallback(lambda txid: self._add_to_pending_claims(name, txid))
d.addCallback(lambda r: self._render_response(r, OK_CODE))
d.addErrback(lambda err: self._render_response(err.getTraceback(), BAD_REQUEST))

View file

@ -43,7 +43,7 @@ class Publisher(object):
self.stream_hash = None
self.metadata = {}
def start(self, name, file_path, bid, metadata, old_txid):
def start(self, name, file_path, bid, metadata):
def _show_result():
log.info("Published %s --> lbry://%s txid: %s", self.file_name, self.publish_name, self.txid)
@ -53,7 +53,6 @@ class Publisher(object):
self.file_path = file_path
self.bid_amount = bid
self.metadata = metadata
self.old_txid = old_txid
d = self._check_file_path(self.file_path)
d.addCallback(lambda _: create_lbry_file(self.session, self.lbry_file_manager,
@ -106,21 +105,12 @@ class Publisher(object):
self.metadata['content-type'] = mimetypes.guess_type(os.path.join(self.lbry_file.download_directory,
self.lbry_file.file_name))[0]
self.metadata['ver'] = CURRENT_METADATA_VERSION
m = Metadata(self.metadata)
if self.old_txid:
d = self.wallet.abandon_name(self.old_txid)
d.addCallback(lambda tx: log.info("Abandoned tx %s" % str(tx)))
d.addCallback(lambda _: self.wallet.claim_name(self.publish_name,
self.bid_amount,
Metadata(self.metadata)))
else:
d = self.wallet.claim_name(self.publish_name,
self.bid_amount,
Metadata(self.metadata))
def set_tx_hash(txid):
self.txid = txid
d = self.wallet.claim_name(self.publish_name, self.bid_amount, m)
d.addCallback(set_tx_hash)
return d