lib/ayadn/action.rb in ayadn-1.0.13 vs lib/ayadn/action.rb in ayadn-1.1.0

- old
+ new

@@ -92,11 +92,11 @@ doing(options) stream = @api.get_conversations(options) (no_new_posts unless Databases.has_new?(stream, 'explore:replies')) if options[:new] Databases.save_max_id(stream) render_view(stream, options) - Scroll.new(@api, @view).conversations(options) if options[:scroll] + Scroll.new(@api, @view).replies(options) if options[:scroll] rescue => e Errors.global_error("action/conversations", options, e) ensure Databases.close_all end @@ -162,11 +162,16 @@ missing_username if username.empty? username = Workers.add_arobase_if_missing(username) doing(options) stream = @api.get_whatstarred(username, options) user_404(username) if meta_404(stream) - stream['data'].empty? ? no_data('whatstarred') : render_view(stream, options) + no_data('whatstarred') if stream['data'].empty? + if options[:extract] + view_all_stars_links(stream) + else + render_view(stream, options) + end rescue => e Errors.global_error("action/whatstarred", [username, options], e) ensure Databases.close_all end @@ -243,10 +248,26 @@ ensure Databases.close_all end end + def delete_m(args) + begin + missing_message_id unless args.length == 2 + message_id = args[1] + missing_message_id unless message_id.is_integer? + channel_id = get_channel_id_from_alias(args[0]) + print Status.deleting_message(message_id) + resp = @api.delete_message(channel_id, message_id) + check_message_has_been_deleted(message_id, resp) + rescue => e + Errors.global_error("action/delete message", message_id, e) + ensure + Databases.close_all + end + end + def unfollow(username) begin missing_username if username.empty? username = Workers.add_arobase_if_missing(username) puts Status.unfollowing(username) @@ -386,11 +407,15 @@ def hashtag(hashtag, options) begin doing(options) stream = @api.get_hashtag(hashtag) no_data('hashtag') if stream['data'].empty? - render_view(stream, options) + if options[:extract] + view_all_hashtag_links(stream, hashtag) + else + render_view(stream, options) + end rescue => e Errors.global_error("action/hashtag", [hashtag, options], e) ensure Databases.close_all end @@ -399,11 +424,15 @@ def search(words, options) begin doing(options) stream = @api.get_search(words, options) no_data('search') if stream['data'].empty? - render_view(stream, options) + if options[:extract] + view_all_search_links(stream, words) + else + render_view(stream, options) + end rescue => e Errors.global_error("action/search", [words, options], e) ensure Databases.close_all end @@ -486,16 +515,20 @@ ensure Databases.close_all end end - def view_settings + def view_settings(options) begin - @view.clear_screen - @view.show_settings + if options[:raw] + puts Settings.options.to_json + else + @view.clear_screen + @view.show_settings + end rescue => e - Errors.global_error("action/settings", nil, e) + Errors.global_error("action/settings", options, e) ensure Databases.close_all end end @@ -696,10 +729,11 @@ end def write begin writer = Post.new + puts Status.writing puts Status.post lines_array = writer.compose writer.check_post_length(lines_array) @view.clear_screen puts Status.posting @@ -719,10 +753,11 @@ begin missing_username if username.empty? temp = Workers.add_arobase_if_missing(username) username = [temp] messenger = Post.new + puts Status.message_from(username) puts Status.message lines_array = messenger.compose messenger.check_message_length(lines_array) @view.clear_screen puts Status.posting @@ -740,10 +775,11 @@ def send_to_channel(channel_id) begin channel_id = get_channel_id_from_alias(channel_id) messenger = Post.new + puts Status.writing puts Status.post lines_array = messenger.compose messenger.check_message_length(lines_array) @view.clear_screen puts Status.posting @@ -771,10 +807,11 @@ replied_to = @api.get_details(post_id) post_404(post_id) if meta_404(replied_to) end end poster = Post.new + puts Status.writing puts Status.reply lines_array = poster.compose poster.check_post_length(lines_array) @view.clear_screen reply = poster.reply(lines_array.join("\n"), Workers.new.build_posts([replied_to['data']])) @@ -800,10 +837,11 @@ abort(Status.empty_fields) if el.length == 0 end @view.clear_screen #text_to_post = "#nowplaying '#{itunes.track}' from '#{itunes.album}' by #{itunes.artist}" text_to_post = "#nowplaying\nTitle: ‘#{itunes.track}’\nArtist: #{itunes.artist}\nfrom ‘#{itunes.album}’" + puts Status.writing show_nowplaying(text_to_post) unless STDIN.getch == ("y" || "Y") puts "\nCanceled.\n\n".color(:red) exit end @@ -931,10 +969,19 @@ else whine(Status.not_deleted(post_id), resp) end end + def check_message_has_been_deleted(message_id, resp) + if resp['meta']['code'] == 200 + puts Status.deleted_m(message_id) + Logs.rec.info "Deleted message #{message_id}." + else + whine(Status.not_deleted(message_id), resp) + end + end + def check_has_been_unblocked(username, resp) if resp['meta']['code'] == 200 puts Status.unblocked(username) Logs.rec.info "Unblocked #{username}." else @@ -1109,10 +1156,15 @@ def missing_post_id puts Status.error_missing_post_id exit end + def missing_message_id + puts Status.error_missing_message_id + exit + end + def auto_save_followings(list) FileOps.save_followings_list(list) if Settings.options[:backup][:auto_save_lists] end def auto_save_followers(list) FileOps.save_followers_list(list) if Settings.options[:backup][:auto_save_lists] @@ -1142,9 +1194,45 @@ def countdown(wait) wait.downto(1) do |i| print "\r#{sprintf("%02d", i)} sec... QUIT WITH [CTRL+C]".color(:cyan) sleep 1 end + end + + def links_from_posts(stream) + links = [] + worker = Workers.new + stream['data'].each do |post| + from = worker.extract_links(post) + from.each {|l| links << l} + end + links.uniq! + links + end + + def show_links(links) + links.each {|l| puts "#{l}\n".color(Settings.options[:colors][:link])} + end + + def view_all_hashtag_links(stream, hashtag) + links = links_from_posts(stream) + @view.clear_screen + puts "Links from posts containing hashtag '##{hashtag}': \n".color(:cyan) + show_links(links) + end + + def view_all_search_links(stream, words) + links = links_from_posts(stream) + @view.clear_screen + puts "Links from posts containing word(s) '#{words}': \n".color(:cyan) + show_links(links) + end + + def view_all_stars_links(stream) + links = links_from_posts(stream) + @view.clear_screen + puts "Links from your starred posts: \n".color(:cyan) + show_links(links) end end end