|
@@ -4,29 +4,29 @@ from pprint import pprint
|
|
|
import requests
|
|
|
import argparse
|
|
|
|
|
|
+from rscli import rsfiles
|
|
|
+from rscli.httputils import req
|
|
|
+
|
|
|
try:
|
|
|
from colors import color
|
|
|
+ has_colors = True
|
|
|
except ImportError:
|
|
|
+ has_colors = False
|
|
|
|
|
|
+if not has_colors or not sys.stdout.isatty():
|
|
|
def color(text, *args, **kwargs):
|
|
|
return text
|
|
|
|
|
|
|
|
|
+
|
|
|
+def err(msg):
|
|
|
+ print(color(msg, fg="red", style="bold"))
|
|
|
+
|
|
|
+
|
|
|
def is_group_subscribed(mSubscribeFlags):
|
|
|
return bool(mSubscribeFlags & 4)
|
|
|
|
|
|
|
|
|
-def req(args, location, data=None):
|
|
|
- kwargs = {}
|
|
|
- if data is not None:
|
|
|
- kwargs["json"] = data
|
|
|
- r = requests.post(
|
|
|
- args.endpoint + location, auth=tuple(args.auth.split(":", 2)), **kwargs
|
|
|
- )
|
|
|
- r.raise_for_status()
|
|
|
- # TODO: handle r.status_code != 200
|
|
|
- return r
|
|
|
-
|
|
|
|
|
|
def main_forum_list(args):
|
|
|
r = req(args, "/rsGxsForums/getForumsSummaries")
|
|
@@ -47,6 +47,7 @@ def main_forum_list(args):
|
|
|
def main_forum_read(args):
|
|
|
r = req(args, "/rsGxsForums/getForumMsgMetaData", {"forumId": args.forum_id})
|
|
|
items = r.json()["msgMetas"]
|
|
|
+ items.sort(key=lambda p: p['mPublishTs'], reverse=True)
|
|
|
if args.long:
|
|
|
msgs = [item["mMsgId"] for item in items[: args.num_posts]]
|
|
|
items_r = req(
|
|
@@ -55,13 +56,14 @@ def main_forum_read(args):
|
|
|
{"forumId": args.forum_id, "msgsIds": msgs},
|
|
|
)
|
|
|
items = items_r.json()["msgs"]
|
|
|
+ items.sort(key=lambda p: p['mMeta']['mPublishTs'], reverse=True)
|
|
|
for item in items:
|
|
|
print(color(item["mMeta"]["mMsgName"], style="bold", fg="green"))
|
|
|
print()
|
|
|
print(item["mMsg"]) # TODO: html2txt
|
|
|
print()
|
|
|
else:
|
|
|
- for item in posts[: args.num_posts]:
|
|
|
+ for item in items[: args.num_posts]:
|
|
|
print(color(item["mMsgName"], style="bold", fg="green"))
|
|
|
print(" " + color(item["mMsgId"], style="underline"))
|
|
|
|
|
@@ -85,6 +87,7 @@ def main_channel_list(args):
|
|
|
def main_channel_read(args):
|
|
|
r = req(args, "/rsGxsChannels/getContentSummaries", {"channelId": args.channel_id})
|
|
|
posts = r.json()["summaries"]
|
|
|
+ posts.sort(key=lambda p: p['mPublishTs'], reverse=True)
|
|
|
if args.long:
|
|
|
msgs = [post["mMsgId"] for post in posts[: args.num_posts]]
|
|
|
posts_r = req(
|
|
@@ -93,6 +96,7 @@ def main_channel_read(args):
|
|
|
{"channelId": args.channel_id, "contentsIds": msgs},
|
|
|
)
|
|
|
posts = posts_r.json()["posts"]
|
|
|
+ posts.sort(key=lambda p: p['mMeta']['mPublishTs'], reverse=True)
|
|
|
for post in posts:
|
|
|
print(color(post["mMeta"]["mMsgName"], style="bold", fg="green"))
|
|
|
print()
|
|
@@ -116,7 +120,6 @@ def main_channel_show(args):
|
|
|
|
|
|
|
|
|
def main_channel_post_v1(args):
|
|
|
- chid = args.channel_id
|
|
|
r = req(
|
|
|
args,
|
|
|
"/rsGxsChannels/createPost",
|
|
@@ -140,7 +143,6 @@ def main_channel_post_v1(args):
|
|
|
|
|
|
|
|
|
def main_channel_post(args):
|
|
|
- chid = args.channel_id
|
|
|
try:
|
|
|
r = req(
|
|
|
args,
|
|
@@ -165,6 +167,14 @@ def main_channel_post(args):
|
|
|
return main_channel_post_v1(args)
|
|
|
|
|
|
|
|
|
+
|
|
|
+def main_file_publish(args):
|
|
|
+ ret = rsfiles.file_publish(args, args.fnames)
|
|
|
+ for filehash, fname in zip(ret, args.fnames):
|
|
|
+ print(color(filehash, fg="green") + " \t%s" % fname)
|
|
|
+ print(" " + rsfiles.get_file_link(args, filehash, fname=fname))
|
|
|
+
|
|
|
+
|
|
|
def get_parser():
|
|
|
p = argparse.ArgumentParser()
|
|
|
p.add_argument("--endpoint", default="http://127.0.0.1:9092")
|
|
@@ -214,6 +224,12 @@ def get_parser():
|
|
|
forum_read.add_argument("--num-posts", type=int, default=10)
|
|
|
forum_read.set_defaults(mainfunc=main_forum_read)
|
|
|
|
|
|
+ files = p_sub.add_parser("file")
|
|
|
+ files_sub = files.add_subparsers()
|
|
|
+ files_list = files_sub.add_parser("publish")
|
|
|
+ files_list.add_argument("fnames", nargs="+", metavar='fname' )
|
|
|
+ files_list.set_defaults(mainfunc=main_file_publish)
|
|
|
+
|
|
|
# TODO: channel rss -> read and convert to rss
|
|
|
|
|
|
return p
|