#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ TODO 1) Port functions insert_feed, remove_feed, get_entry_unread. 2) Merge with action.py 3) Call sqlite function from function statistics. Returning a list of values doesn't' seem to be a good practice. """ import slixfeed.xmpp.bookmark as bookmark from slixfeed.url import remove_tracking_parameters, replace_hostname def list_unread_entries(result, feed_title): # TODO Add filtering # TODO Do this when entry is added to list and mark it as read # DONE! # results = [] # if get_settings_value(db_file, "filter-deny"): # while len(results) < num: # result = cur.execute(sql).fetchone() # blacklist = await get_settings_value(db_file, "filter-deny").split(",") # for i in blacklist: # if i in result[1]: # continue # print("rejected:", result[1]) # print("accepted:", result[1]) # results.extend([result]) # news_list = "You've got {} news items:\n".format(num) # NOTE Why doesn't this work without list? # i.e. for result in results # for result in results.fetchall(): ix = result[0] title = result[1] # # TODO Retrieve summary from feed # # See fetch.view_entry # summary = result[2] # # Remove HTML tags # try: # summary = BeautifulSoup(summary, "lxml").text # except: # print(result[2]) # breakpoint() # # TODO Limit text length # summary = summary.replace("\n\n\n", "\n\n") # length = await get_settings_value(db_file, "length") # summary = summary[:length] + " […]" # summary = summary.strip().split('\n') # summary = ["> " + line for line in summary] # summary = "\n".join(summary) link = result[2] link = remove_tracking_parameters(link) link = (replace_hostname(link, "link")) or link news_item = ( "\n{}\n{}\n{}\n" ).format(str(title), str(link), str(feed_title)) return news_item def list_search_results(query, results): results_list = ( "Search results for '{}':\n\n```" ).format(query) counter = 0 for result in results: counter += 1 results_list += ( "\n{}\n{}\n" ).format(str(result[0]), str(result[1])) if counter: return results_list + "```\nTotal of {} results".format(counter) else: return "No results were found for: {}".format(query) def list_feeds_by_query(query, results): results_list = ( "Feeds containing '{}':\n\n```" ).format(query) counter = 0 for result in results: counter += 1 results_list += ( "\nName : {}" "\nURL : {}" "\nIndex : {}" "\nMode : {}" "\n" ).format(str(result[0]), str(result[1]), str(result[2]), str(result[3])) if counter: return results_list + "\n```\nTotal of {} feeds".format(counter) else: return "No feeds were found for: {}".format(query) def list_statistics(values): """ Return table statistics. Parameters ---------- db_file : str Path to database file. Returns ------- msg : str Statistics as message. """ msg = ( "```" "\nSTATISTICS\n" "News items : {}/{}\n" "News sources : {}/{}\n" "\nOPTIONS\n" "Items to archive : {}\n" "Update interval : {}\n" "Items per update : {}\n" "Operation status : {}\n" "```" ).format(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7]) return msg def list_last_entries(results, num): titles_list = "Recent {} titles:\n\n```".format(num) counter = 0 for result in results: counter += 1 titles_list += ( "\n{}\n{}\n" ).format(str(result[0]), str(result[1])) if counter: titles_list += "```\n" return titles_list else: return "There are no news at the moment." def list_feeds(results): feeds_list = "\nList of subscriptions:\n\n```\n" counter = 0 for result in results: counter += 1 feeds_list += ( "Name : {}\n" "Address : {}\n" "Updated : {}\n" "Status : {}\n" "ID : {}\n" "\n" ).format(str(result[0]), str(result[1]), str(result[2]), str(result[3]), str(result[4])) if counter: return feeds_list + ( "```\nTotal of {} subscriptions.\n" ).format(counter) else: msg = ( "List of subscriptions is empty.\n" "To add feed, send a URL\n" "Try these:\n" # TODO Pick random from featured/recommended "https://reclaimthenet.org/feed/" ) return msg async def list_bookmarks(self): conferences = await bookmark.get(self) groupchat_list = "\nList of groupchats:\n\n```\n" counter = 0 for conference in conferences: counter += 1 groupchat_list += ( "{}\n" "\n" ).format( conference["jid"] ) groupchat_list += ( "```\nTotal of {} groupchats.\n" ).format(counter) return groupchat_list