Sha256: 51722bba41d01de6116fcefc7972edd2f4899e10ae772c50a4f563500653ce14

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

require_relative 'fb_duration'
require_relative 'storage'
require_relative 'models/message'
require_relative 'models/user'
require_relative 'models/message_thread'

class MessageHandler
  attr_reader :driver

  def initialize(driver)
    @driver = driver
  end

  def unread
    messages.reject(&:read?)
  end

  def messages
    visit_messages_page

    chats = xpaths.wait_for_elements(:messages, :chats)
    messages = messages_for_chats(chats)

    messages_after_last_message_time(messages)
  end

  private

  def messages_for_chats(chats)
    chats.map do |chat|
      message_thread = MessageThread.new(title: xpaths.child_element(chat, :messages, :title_relative).text)

      Message.new(
        message_thread: message_thread,
        text: chat_text(chat),
        read: chat_read?(chat),
        timestamp: chat_timestamp(chat)
      )
    end
  end

  def chat_text(chat)
    xpaths.child_element(chat, :messages, :text_relative).text
  end

  def chat_read?(chat)
    !xpaths.element_has_child?(chat, :messages, :mark_as_read_button_relative)
  end

  def chat_timestamp(chat)
    message_time_ago = xpaths.child_element(chat, :messages, :time_sent_ago_relative).text
    FbDuration.parse_to_time(message_time_ago)
  end

  def messages_after_last_message_time(messages)
    last_message_check_time = Storage.get(:last_message_check_time, default: Time.new(2004, 2, 4))
    last_check_time_with_buffer = last_message_check_time - 5.minutes

    messages_to_return = messages.select { _1.timestamp > last_check_time_with_buffer }

    Storage.set(:last_message_check_time, Time.now)

    messages_to_return
  end

  def xpaths
    @xpaths ||= Xpaths.new(driver)
  end

  def visit_messages_page
    driver.navigate.to('https://www.facebook.com/messages/')
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
fuck_facebook-0.5.2 src/message_handler.rb
fuck_facebook-0.5.1 src/message_handler.rb
fuck_facebook-0.5.0 src/message_handler.rb
fuck_facebook-0.4.1 src/message_handler.rb