diff --git a/frontend/src/pages/squeak/Squeak.js b/frontend/src/pages/squeak/Squeak.js
index a61832d0..a8f9e908 100644
--- a/frontend/src/pages/squeak/Squeak.js
+++ b/frontend/src/pages/squeak/Squeak.js
@@ -52,9 +52,9 @@ export default function SqueakPage() {
getAncestorSqueakDisplaysRequest(hash, handleLoadedAncestorSqueaks);
};
const subscribeAncestorSqueaks = (hash) => subscribeAncestorSqueakDisplaysRequest(hash, setAncestorSqueaks);
- const getReplySqueaks = (hash, limit, blockHeight, squeakTime, squeakHash) => {
+ const getReplySqueaks = (hash, limit, lastEntry) => {
setWaitingForReplySqueaks(true);
- getReplySqueakDisplaysRequest(hash, limit, blockHeight, squeakTime, squeakHash, handleLoadedReplySqueaks);
+ getReplySqueakDisplaysRequest(hash, limit, lastEntry, handleLoadedReplySqueaks);
};
const subscribeReplySqueaks = (hash) => subscribeReplySqueakDisplaysRequest(hash, (resp) => {
setReplySqueaks((prevReplySqueaks) => prevReplySqueaks.concat(resp));
@@ -107,7 +107,7 @@ export default function SqueakPage() {
return () => stream.cancel();
}, [hash]);
useEffect(() => {
- getReplySqueaks(hash, SQUEAKS_PER_PAGE, null, null, null);
+ getReplySqueaks(hash, SQUEAKS_PER_PAGE, null);
}, [hash]);
useEffect(() => {
const stream = subscribeReplySqueaks(hash);
@@ -234,10 +234,7 @@ export default function SqueakPage() {
disabled={waitingForReplySqueaks}
onClick={() => {
const latestSqueak = replySqueaks.slice(-1).pop();
- const latestSqueakHeight = (latestSqueak ? latestSqueak.getBlockHeight() : null);
- const latestSqueakTime = (latestSqueak ? latestSqueak.getSqueakTime() : null);
- const latestSqueakHash = (latestSqueak ? latestSqueak.getSqueakHash() : null);
- getReplySqueaks(hash, SQUEAKS_PER_PAGE, latestSqueakHeight, latestSqueakTime, latestSqueakHash);
+ getReplySqueaks(hash, SQUEAKS_PER_PAGE, latestSqueak);
}}
>
diff --git a/frontend/src/pages/squeakaddress/SqueakAddress.js b/frontend/src/pages/squeakaddress/SqueakAddress.js
index 78ddc91a..0633c2f6 100644
--- a/frontend/src/pages/squeakaddress/SqueakAddress.js
+++ b/frontend/src/pages/squeakaddress/SqueakAddress.js
@@ -49,9 +49,9 @@ export default function SqueakAddressPage() {
const getSqueakProfile = (address) => {
getSqueakProfileByAddressRequest(address, setSqueakProfile);
};
- const getSqueaks = (address, limit, blockHeight, squeakTime, squeakHash) => {
+ const getSqueaks = (address, limit, lastEntry) => {
setWaitingForSqueaks(true);
- getAddressSqueakDisplaysRequest(address, limit, blockHeight, squeakTime, squeakHash, handleLoadedAddressSqueaks);
+ getAddressSqueakDisplaysRequest(address, limit, lastEntry, handleLoadedAddressSqueaks);
};
const subscribeSqueaks = (address) => subscribeAddressSqueakDisplaysRequest(address, (resp) => {
setSqueaks((prevSqueaks) => [resp].concat(prevSqueaks));
@@ -90,7 +90,7 @@ export default function SqueakAddressPage() {
getSqueakProfile(address);
}, [address]);
useEffect(() => {
- getSqueaks(address, SQUEAKS_PER_PAGE, null, null, null);
+ getSqueaks(address, SQUEAKS_PER_PAGE, null);
}, [address]);
useEffect(() => {
const stream = subscribeSqueaks(address);
@@ -247,10 +247,7 @@ export default function SqueakAddressPage() {
disabled={waitingForSqueaks}
onClick={() => {
const latestSqueak = squeaks.slice(-1).pop();
- const latestSqueakHeight = (latestSqueak ? latestSqueak.getBlockHeight() : null);
- const latestSqueakTime = (latestSqueak ? latestSqueak.getSqueakTime() : null);
- const latestSqueakHash = (latestSqueak ? latestSqueak.getSqueakHash() : null);
- getSqueaks(address, SQUEAKS_PER_PAGE, latestSqueakHeight, latestSqueakTime, latestSqueakHash);
+ getSqueaks(address, SQUEAKS_PER_PAGE, latestSqueak);
}}
>
diff --git a/frontend/src/pages/timeline/Timeline.js b/frontend/src/pages/timeline/Timeline.js
index a42851a7..ccc9e5b6 100644
--- a/frontend/src/pages/timeline/Timeline.js
+++ b/frontend/src/pages/timeline/Timeline.js
@@ -43,9 +43,9 @@ export default function TimelinePage() {
const history = useHistory();
- const getSqueaks = (limit, blockHeight, squeakTime, squeakHash) => {
+ const getSqueaks = (limit, lastEntry) => {
setWaitingForTimeline(true);
- getTimelineSqueakDisplaysRequest(limit, blockHeight, squeakTime, squeakHash, handleLoadedTimeline, alertFailedRequest);
+ getTimelineSqueakDisplaysRequest(limit, lastEntry, handleLoadedTimeline, alertFailedRequest);
};
const subscribeNewSqueaks = () => subscribeTimelineSqueakDisplaysRequest(handleLoadedNewSqueak);
const getNetwork = () => {
@@ -67,7 +67,7 @@ export default function TimelinePage() {
const handleClickRefresh = () => {
setSqueaks(null);
setNewSqueaks(null);
- getSqueaks(SQUEAKS_PER_PAGE, null, null, null);
+ getSqueaks(SQUEAKS_PER_PAGE, null);
};
const handleLoadedTimeline = (loadedSqueaks) => {
@@ -90,7 +90,7 @@ export default function TimelinePage() {
};
useEffect(() => {
- getSqueaks(SQUEAKS_PER_PAGE, null, null, null);
+ getSqueaks(SQUEAKS_PER_PAGE, null);
}, []);
useEffect(() => {
const stream = subscribeNewSqueaks();
@@ -148,10 +148,7 @@ export default function TimelinePage() {
disabled={waitingForTimeline}
onClick={() => {
const latestSqueak = squeaks.slice(-1).pop();
- const latestSqueakHeight = (latestSqueak ? latestSqueak.getBlockHeight() : null);
- const latestSqueakTime = (latestSqueak ? latestSqueak.getSqueakTime() : null);
- const latestSqueakHash = (latestSqueak ? latestSqueak.getSqueakHash() : null);
- getSqueaks(SQUEAKS_PER_PAGE, latestSqueakHeight, latestSqueakTime, latestSqueakHash);
+ getSqueaks(SQUEAKS_PER_PAGE, latestSqueak);
}}
>
diff --git a/frontend/src/squeakclient/requests.js b/frontend/src/squeakclient/requests.js
index f1371538..a1dc5bdc 100644
--- a/frontend/src/squeakclient/requests.js
+++ b/frontend/src/squeakclient/requests.js
@@ -111,12 +111,10 @@ export function getUserRequest(handleResponse) {
});
}
-export function getTimelineSqueakDisplaysRequest(limit, blockHeight, squeakTime, squeakHash, handleResponse, handleErr) {
+export function getTimelineSqueakDisplaysRequest(limit, lastEntry, handleResponse, handleErr) {
const request = new GetTimelineSqueakDisplaysRequest();
request.setLimit(limit);
- request.setBlockHeight(blockHeight);
- request.setSqueakTime(squeakTime);
- request.setSqueakHash(squeakHash);
+ request.setLastEntry(lastEntry);
client.getTimelineSqueakDisplays(request, {}, (err, response) => {
if (err) {
handleErr(err);
@@ -356,13 +354,11 @@ export function getAncestorSqueakDisplaysRequest(hash, handleResponse) {
});
}
-export function getReplySqueakDisplaysRequest(hash, limit, latestBlockHeight, latestSqueakTime, latestSqueakHash, handleResponse) {
+export function getReplySqueakDisplaysRequest(hash, limit, lastEntry, handleResponse) {
const request = new GetReplySqueakDisplaysRequest();
request.setSqueakHash(hash);
request.setLimit(limit);
- request.setLatestBlockHeight(latestBlockHeight);
- request.setLatestSqueakTime(latestSqueakTime);
- request.setLatestSqueakHash(latestSqueakHash);
+ request.setLastEntry(lastEntry);
client.getReplySqueakDisplays(request, {}, (err, response) => {
handleResponse(response.getSqueakDisplayEntriesList());
});
@@ -376,13 +372,11 @@ export function getSqueakProfileByAddressRequest(address, handleResponse) {
});
}
-export function getAddressSqueakDisplaysRequest(address, limit, blockHeight, squeakTime, squeakHash, handleResponse) {
+export function getAddressSqueakDisplaysRequest(address, limit, lastEntry, handleResponse) {
const request = new GetAddressSqueakDisplaysRequest();
request.setAddress(address);
request.setLimit(limit);
- request.setBlockHeight(blockHeight);
- request.setSqueakTime(squeakTime);
- request.setSqueakHash(squeakHash);
+ request.setLastEntry(lastEntry);
client.getAddressSqueakDisplays(request, {}, (err, response) => {
handleResponse(response.getSqueakDisplayEntriesList());
});
diff --git a/proto/squeak_admin.proto b/proto/squeak_admin.proto
index e8d04b37..7bc74569 100644
--- a/proto/squeak_admin.proto
+++ b/proto/squeak_admin.proto
@@ -553,14 +553,8 @@ message GetTimelineSqueakDisplaysRequest {
/// Limit number of results
int32 limit = 1;
- /// Block height
- int32 block_height = 2;
-
- /// Squeak time
- int64 squeak_time = 3;
-
- /// Hash of the squeak.
- string squeak_hash = 4;
+ /// Last entry
+ SqueakDisplayEntry last_entry = 2;
}
message GetTimelineSqueakDisplaysReply {
@@ -575,14 +569,8 @@ message GetAddressSqueakDisplaysRequest {
/// Limit number of results
int32 limit = 2;
- /// Block height
- int32 block_height = 3;
-
- /// Squeak time
- int64 squeak_time = 4;
-
- /// Hash of the squeak.
- string squeak_hash = 5;
+ /// Last entry
+ SqueakDisplayEntry last_entry = 3;
}
message GetAddressSqueakDisplaysReply {
@@ -607,14 +595,8 @@ message GetReplySqueakDisplaysRequest {
/// Limit number of results
int32 limit = 2;
- /// Block height
- int32 latest_block_height = 3;
-
- /// Squeak time
- int64 latest_squeak_time = 4;
-
- /// Hash of the squeak.
- string latest_squeak_hash = 5;
+ /// Last entry
+ SqueakDisplayEntry last_entry = 3;
}
message GetReplySqueakDisplaysReply {
diff --git a/squeaknode/admin/messages.py b/squeaknode/admin/messages.py
index 0359cdd8..c0a83a97 100644
--- a/squeaknode/admin/messages.py
+++ b/squeaknode/admin/messages.py
@@ -201,3 +201,20 @@ def message_to_peer_address(peer_address: squeak_admin_pb2.PeerAddress) -> PeerA
host=peer_address.host,
port=peer_address.port,
)
+
+
+def message_to_squeak_entry(squeak_entry: squeak_admin_pb2.SqueakDisplayEntry) -> SqueakEntry:
+ return SqueakEntry(
+ squeak_hash=bytes.fromhex(squeak_entry.squeak_hash),
+ address=squeak_entry.author_address,
+ block_height=squeak_entry.block_height,
+ block_hash=bytes.fromhex(squeak_entry.block_hash),
+ block_time=squeak_entry.block_time,
+ squeak_time=squeak_entry.squeak_time,
+ reply_to=bytes.fromhex(
+ squeak_entry.reply_to) if squeak_entry.reply_to else None,
+ is_unlocked=squeak_entry.is_unlocked,
+ squeak_profile=None, # TODO: message to squeak profile
+ liked_time=squeak_entry.liked_time_s,
+ content=squeak_entry.content_str,
+ )
diff --git a/squeaknode/admin/squeak_admin_server_handler.py b/squeaknode/admin/squeak_admin_server_handler.py
index d3615170..57989d6e 100644
--- a/squeaknode/admin/squeak_admin_server_handler.py
+++ b/squeaknode/admin/squeak_admin_server_handler.py
@@ -24,6 +24,7 @@ import logging
from proto import squeak_admin_pb2
from squeaknode.admin.messages import connected_peer_to_message
from squeaknode.admin.messages import message_to_peer_address
+from squeaknode.admin.messages import message_to_squeak_entry
from squeaknode.admin.messages import offer_entry_to_message
from squeaknode.admin.messages import payment_summary_to_message
from squeaknode.admin.messages import received_payments_to_message
@@ -312,28 +313,24 @@ class SqueakAdminServerHandler(object):
def handle_get_timeline_squeak_display_entries(self, request):
limit = request.limit
- block_height = request.block_height
- squeak_time = request.squeak_time
- squeak_hash_str = request.squeak_hash
- squeak_hash = bytes.fromhex(
- squeak_hash_str) if squeak_hash_str else None
+ last_entry = message_to_squeak_entry(request.last_entry) if request.HasField(
+ "last_entry") else None
+ # block_height = last_entry.block_height
+ # squeak_time = last_entry.squeak_time
+ # squeak_hash_str = last_entry.squeak_hash
+ # squeak_hash = bytes.fromhex(
+ # squeak_hash_str) if squeak_hash_str else None
logger.info("""Handle get timeline squeak display entries with
limit: {}
- block_height: {}
- squeak_time: {}
- squeak_hash: {}
+ last_entry: {}
""".format(
limit,
- block_height,
- squeak_time,
- squeak_hash,
+ last_entry,
))
squeak_entries = (
self.squeak_controller.get_timeline_squeak_entries(
limit,
- block_height,
- squeak_time,
- squeak_hash,
+ last_entry,
)
)
logger.info(
@@ -351,30 +348,21 @@ class SqueakAdminServerHandler(object):
def handle_get_squeak_display_entries_for_address(self, request):
address = request.address
limit = request.limit
- block_height = request.block_height
- squeak_time = request.squeak_time
- squeak_hash_str = request.squeak_hash
- squeak_hash = bytes.fromhex(
- squeak_hash_str) if squeak_hash_str else None
+ last_entry = message_to_squeak_entry(request.last_entry) if request.HasField(
+ "last_entry") else None
logger.info("""Handle get squeak display entries for address: {} with
limit: {}
- block_height: {}
- squeak_time: {}
- squeak_hash: {}
+ last_entry: {}
""".format(
address,
limit,
- block_height,
- squeak_time,
- squeak_hash,
+ last_entry,
))
squeak_entries = (
self.squeak_controller.get_squeak_entries_for_address(
address,
limit,
- block_height,
- squeak_time,
- squeak_hash,
+ last_entry,
)
)
logger.info(
@@ -418,30 +406,21 @@ class SqueakAdminServerHandler(object):
squeak_hash_str = request.squeak_hash
squeak_hash = bytes.fromhex(squeak_hash_str)
limit = request.limit
- latest_block_height = request.latest_block_height
- latest_squeak_time = request.latest_squeak_time
- latest_squeak_hash_str = request.latest_squeak_hash
- latest_squeak_hash = bytes.fromhex(
- latest_squeak_hash_str) if latest_squeak_hash_str else None
+ last_entry = message_to_squeak_entry(request.last_entry) if request.HasField(
+ "last_entry") else None
logger.info("""Handle get reply squeak display entries for squeak hash: {} with
limit: {}
- block_height: {}
- squeak_time: {}
- squeak_hash: {}
+ last_entry: {}
""".format(
squeak_hash_str,
limit,
- latest_block_height,
- latest_squeak_time,
- latest_squeak_hash_str,
+ last_entry,
))
squeak_entries = (
self.squeak_controller.get_reply_squeak_entries(
squeak_hash,
limit,
- latest_block_height,
- latest_squeak_time,
- latest_squeak_hash,
+ last_entry,
)
)
logger.info(
diff --git a/squeaknode/db/squeak_db.py b/squeaknode/db/squeak_db.py
index 4640a4b2..ca5d0963 100644
--- a/squeaknode/db/squeak_db.py
+++ b/squeaknode/db/squeak_db.py
@@ -241,24 +241,22 @@ class SqueakDb:
def get_timeline_squeak_entries(
self,
limit: int,
- block_height: int = MAX_INT,
- squeak_time: int = MAX_INT,
- squeak_hash: bytes = MAX_HASH,
+ last_entry: Optional[SqueakEntry],
) -> List[SqueakEntry]:
""" Get all followed squeaks. """
- block_height = block_height or MAX_INT
- squeak_time = squeak_time or MAX_INT
- squeak_hash = squeak_hash or MAX_HASH
- logger.debug("""Timeline db query with
+ last_block_height = last_entry.block_height if last_entry else MAX_INT
+ last_squeak_time = last_entry.squeak_time if last_entry else MAX_INT
+ last_squeak_hash = last_entry.squeak_hash if last_entry else MAX_HASH
+ logger.info("""Timeline db query with
limit: {}
block_height: {}
squeak_time: {}
squeak_hash: {}
""".format(
limit,
- block_height,
- squeak_time,
- squeak_hash.hex(),
+ last_block_height,
+ last_squeak_time,
+ last_squeak_hash.hex(),
))
s = (
select([self.squeaks, self.profiles])
@@ -275,9 +273,9 @@ class SqueakDb:
self.squeaks.c.n_time,
self.squeaks.c.hash,
) < tuple_(
- block_height,
- squeak_time,
- squeak_hash,
+ last_block_height,
+ last_squeak_time,
+ last_squeak_hash,
)
)
.order_by(
@@ -318,14 +316,23 @@ class SqueakDb:
self,
address: str,
limit: int,
- block_height: int,
- squeak_time: int,
- squeak_hash: bytes,
+ last_entry: Optional[SqueakEntry],
) -> List[SqueakEntry]:
""" Get a squeak. """
- block_height = block_height or MAX_INT
- squeak_time = squeak_time or MAX_INT
- squeak_hash = squeak_hash or MAX_HASH
+ last_block_height = last_entry.block_height if last_entry else MAX_INT
+ last_squeak_time = last_entry.squeak_time if last_entry else MAX_INT
+ last_squeak_hash = last_entry.squeak_hash if last_entry else MAX_HASH
+ logger.info("""Timeline db query with
+ limit: {}
+ block_height: {}
+ squeak_time: {}
+ squeak_hash: {}
+ """.format(
+ limit,
+ last_block_height,
+ last_squeak_time,
+ last_squeak_hash.hex(),
+ ))
s = (
select([self.squeaks, self.profiles])
.select_from(
@@ -341,9 +348,9 @@ class SqueakDb:
self.squeaks.c.n_time,
self.squeaks.c.hash,
) < tuple_(
- block_height,
- squeak_time,
- squeak_hash,
+ last_block_height,
+ last_squeak_time,
+ last_squeak_hash,
)
)
.order_by(
@@ -428,26 +435,22 @@ class SqueakDb:
self,
squeak_hash: bytes,
limit: int,
- latest_block_height: int,
- latest_squeak_time: int,
- latest_squeak_hash: bytes,
+ last_entry: Optional[SqueakEntry],
) -> List[SqueakEntry]:
""" Get all replies for a squeak hash. """
- latest_block_height = latest_block_height or MAX_INT
- latest_squeak_time = latest_squeak_time or MAX_INT
- latest_squeak_hash = latest_squeak_hash or MAX_HASH
- logger.debug("""Replies db query with
- squeak_hash: {}
+ last_block_height = last_entry.block_height if last_entry else MAX_INT
+ last_squeak_time = last_entry.squeak_time if last_entry else MAX_INT
+ last_squeak_hash = last_entry.squeak_hash if last_entry else MAX_HASH
+ logger.info("""Timeline db query with
limit: {}
- latest_block_height: {}
- latest_squeak_time: {}
- latest_squeak_hash: {}
+ block_height: {}
+ squeak_time: {}
+ squeak_hash: {}
""".format(
- squeak_hash.hex(),
limit,
- latest_block_height,
- latest_squeak_time,
- latest_squeak_hash.hex(),
+ last_block_height,
+ last_squeak_time,
+ last_squeak_hash.hex(),
))
s = (
select([self.squeaks, self.profiles])
@@ -464,9 +467,9 @@ class SqueakDb:
self.squeaks.c.n_time,
self.squeaks.c.hash,
) < tuple_(
- latest_block_height,
- latest_squeak_time,
- latest_squeak_hash,
+ last_block_height,
+ last_squeak_time,
+ last_squeak_hash,
)
)
.order_by(
diff --git a/squeaknode/node/squeak_controller.py b/squeaknode/node/squeak_controller.py
index 810df177..c07f149c 100644
--- a/squeaknode/node/squeak_controller.py
+++ b/squeaknode/node/squeak_controller.py
@@ -425,15 +425,11 @@ class SqueakController:
def get_timeline_squeak_entries(
self,
limit: int,
- block_height: int,
- squeak_time: int,
- squeak_hash: bytes,
+ last_entry: Optional[SqueakEntry],
) -> List[SqueakEntry]:
return self.squeak_db.get_timeline_squeak_entries(
limit,
- block_height,
- squeak_time,
- squeak_hash,
+ last_entry,
)
def get_liked_squeak_entries(self) -> List[SqueakEntry]:
@@ -443,16 +439,12 @@ class SqueakController:
self,
address: str,
limit: int,
- block_height: int,
- squeak_time: int,
- squeak_hash: bytes,
+ last_entry: Optional[SqueakEntry],
) -> List[SqueakEntry]:
return self.squeak_db.get_squeak_entries_for_address(
address,
limit,
- block_height,
- squeak_time,
- squeak_hash,
+ last_entry,
)
def get_ancestor_squeak_entries(self, squeak_hash: bytes) -> List[SqueakEntry]:
@@ -464,16 +456,12 @@ class SqueakController:
self,
squeak_hash: bytes,
limit: int,
- latest_block_height: int,
- latest_squeak_time: int,
- latest_squeak_hash: bytes,
+ last_entry: Optional[SqueakEntry],
) -> List[SqueakEntry]:
return self.squeak_db.get_thread_reply_squeak_entries(
squeak_hash,
limit,
- latest_block_height,
- latest_squeak_time,
- latest_squeak_hash,
+ last_entry,
)
def lookup_squeaks(self, addresses: List[str], min_block: int, max_block: int) -> List[bytes]: