123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- require 'java'
- java_import com.jbidwatcher.util.config.JConfig
- java_import com.cyberfox.util.platform.Path
- java_import com.jbidwatcher.util.Currency
- java_import com.jbidwatcher.util.Constants
- java_import com.jbidwatcher.util.queue.MQFactory
- java_import com.jbidwatcher.auction.AuctionEntry
- java_import com.jbidwatcher.auction.server.AuctionServerManager
- java_import com.jbidwatcher.ui.AuctionsManager
- java_import com.jbidwatcher.ui.FilterManager
- java_import com.jbidwatcher.ui.table.TableColumnController
- java_import com.jbidwatcher.ui.commands.UserActions
- java_import com.jbidwatcher.ui.commands.MenuCommand
- puts "Loading JBidwatcher Ruby Utilities"
- require 'rubygems'
- dirname = File.dirname(__FILE__)
- gems = if File.exists?(File.join(dirname, 'gems.jar')) || File.exists?('lib/jbidwatcher/gems.jar')
- File.expand_path(File.join(dirname, 'gems.jar'))
- else
- JConfig.java_class.class_loader.resource_as_url('lib/jbidwatcher/gems.jar').to_s
- end
- # This is an awful hack, but if I don't do this, Windows doesn't load active_support. :(
- class File
- def self.realpath(x)
- x
- end
- end
- require gems
- ENV['GEM_PATH']="#{gems}!/"
- Gem.paths = ENV
- require 'digest/md5'
- require 'net/http.rb'
- require 'cgi'
- require 'nokogiri'
- require 'json'
- require 'open-uri'
- require 'ebay_parser'
- require 'time'
- require 'column_lookup'
- class JBidwatcherUtilities
- MY_JBIDWATCHER_URL = "http://my.jbidwatcher.com:9876/advanced"
- def test_basics
- # Check that the basic libraries work.
- puts "This is a test..."
- puts Digest::MD5.hexdigest('foo')
- # Check that accessing objects defined by JBidwatcher works
- c = Currency.getCurrency("$54.98")
- puts c.getValue
- puts c.fullCurrencyName
- puts "Done."
- end
- def about
- MQFactory.getConcrete("user").enqueue("FAQ")
- end
- def fire(user_event)
- MQFactory.getConcrete("user").enqueue(user_event)
- end
- def build_url(meth, hash)
- uri = "#{MY_JBIDWATCHER_URL}/#{meth}"
- url = URI.parse(uri)
- [uri, url, hash.to_param]
- end
- def post(command, hash)
- uri, url, params = build_url(command, hash)
- p = Net::HTTP::Post.new(uri)
- p.body = params
- p.content_type = 'application/x-www-form-urlencoded'
- Net::HTTP.new(url.host, url.port).start do |http|
- http.request p
- end
- end
- def report_exception(exception)
- result = post "exception", {:body => exception}
- puts result.body
- result.body
- end
- def recognize_bidpage(entry, page)
- puts entry.title
- result = post "recognize", {:body => page, :user => JConfig.queryConfiguration("my.jbidwatcher.id")}
- puts result.body
- result.body
- end
- def browse_to(id)
- entry = $auctions_manager.getEntry(id)
- entry.server.showBrowser(entry)
- end
- def notify(message)
- MQFactory.getConcrete("Swing").enqueue("NOTIFY #{message}")
- end
- def snipe(auction, amount)
- entry = auction if(auction.respond_to? :getIdentifier)
- entry ||= $auctions_manager.getEntry(auction)
- amount = Currency.getCurrency(amount) unless amount.respond_to? :fullCurrencyName
- entry.prepareSnipe(amount)
- $filter_manager.redrawEntry(entry)
- end
- def cancel_snipe(id)
- entry = $auctions_manager.getEntry(id)
- entry.cancelSnipe(false)
- $filter_manager.redrawEntry(entry)
- end
- def custom_column(column, auction)
- @columns[column].call(auction).to_s
- end
- def add_column(name, &block)
- $table_controller.add_column(name) unless @columns[name]
- @columns[name] = block
- end
- def initialize
- @columns = {}
- end
- COMMANDS = {}
- UserActions.java_class.declared_instance_methods.each do |m|
- if m.annotation_present?(MenuCommand.java_class)
- annotation = m.annotation(MenuCommand.java_class)
- COMMANDS[annotation.action] = { :name => m.name.to_sym, :arity => annotation.params } if annotation.action && annotation.action != ""
- COMMANDS[m.name.to_sym] = { :name => m.name.to_sym, :arity => annotation.params }
- end
- end
- TRANSLATIONS = {
- 'Add New' => 'Add',
- 'Check For Updates' => 'Check Updates',
- 'Explain Colors And Icons' => 'Help Colors'
- }
- def handle_action(action, action_manager, *params)
- do_action = "Do#{action.gsub(' ', '')}".to_sym
- pair = COMMANDS[action] || COMMANDS[do_action]
- method = pair.nil? ? do_action : pair[:name]
- arity = pair.nil? ? 0 : pair[:arity]
- # Special case params: -1 means pass in null as the sole parameter, -2 means just the auction entry.
- params, arity = {-1 => [[nil], 1], -2 => [[params[1]], 1]}[arity] if arity < 0
- if action_manager.respond_to?(method, true)
- params = [method] + params[0...arity]
- action_manager.send(*params)
- else
- JConfig.log.logMessage "Did not know how to handle #{action}"
- end
- end
- def load_scripts
- script_dir = Path.getCanonicalFile "scripts","jbidwatcher",false
- if File.exist?(script_dir) && File.directory?(script_dir)
- sd = Dir.new script_dir
- scripts = sd.reject do |filename|
- script_file = File.join(script_dir, filename)
- File.directory?(script_file) || File.extname(script_file) != '.rb'
- end
- scripts.each do |script_file|
- require File.join(script_dir, script_file)
- end
- else
- unless File.exist? script_dir
- Dir.mkdir script_dir
- end
- end
- end
- def after_startup
- require "models"
- gixen
- require 'active_support'
- require 'active_support/core_ext'
- require 'pp'
- end
- def parse(body)
- Ebay::Parser.new(body).parse
- end
- def log(msg)
- JConfig.log.logMessage msg
- end
- def get_update(auction_id, last_updated_at)
- current = (Time.now.to_f*1000).to_i
- last_int = last_updated_at.nil? ? 0 : last_updated_at.time
- lite_url = "http://www.ebay.com/itm/ws/eBayISAPI.dll?ViewItemLite&pbv=0&item=#{auction_id}"
- lite_url += "&lastaccessed=#{last_int}&lvr=0&dl=5&_=#{current}"
- body = open(lite_url).read
- result = JSON.parse(body)
- response = result['ViewItemLiteResponse']
- if response['Error'].blank?
- item = response['Item'].first
- end_date = item['EndDate']
- ends_at = Time.parse(end_date['Time'] + ' ' + end_date['Date'])
- cur_price = item['CurrentPrice']['MoneyStandard']
- ended = item['IsEnded']
- bid_count = item['BidCount']
- {
- 'current_price' => cur_price,
- 'end_date' => (ends_at.to_f*1000).to_i,
- 'ended' => ended,
- 'bid_count' => bid_count
- }
- end
- rescue => e
- log e.inspect
- return nil
- end
- def dump_hash(h)
- pp h
- end
- def gixen
- @gixen ||= begin
- dirname = File.dirname(__FILE__)
- if File.exists?(File.join(dirname, "gixen")) || File.exists?('lib/jbidwatcher/gixen')
- $:<< File.join(dirname, "gixen")
- else
- $:<< JConfig.java_class.class_loader.resource_as_url('lib/jbidwatcher/gixen').to_s
- end
- require 'gixen'
- server_prefix = Constants::EBAY_SERVER_NAME
- username = JConfig.query_configuration("#{server_prefix}.user")
- password = JConfig.query_configuration("#{server_prefix}.password")
- Gixen.new(username, password) if username != 'default'
- end
- end
- # This is just a dumping ground right now; I should change that soon.
- def get_value(entry, column)
- end
- end
- # $auction_server_manager = AuctionServerManager.getInstance
- # $auctions_manager = AuctionsManager.getInstance
- # $filter_manager = $auctions_manager.filters
- $table_controller = TableColumnController.getInstance
- JBidwatcher = JBidwatcherUtilities.new
- JBidwatcher.load_scripts
- # case TableColumnController.CUR_BID :
- # return currentBid(aEntry);
- # case TableColumnController.SNIPE_OR_MAX : return formatSnipeAndBid(aEntry);
- # case TableColumnController.MAX : return aEntry.isBidOn() ? formatBid(aEntry, errorNote) :neverBid;
- # case TableColumnController.SNIPE :
- # return snipeColumn(aEntry, errorNote);
- # case TableColumnController.TIME_LEFT :
- # return timeLeftColumn(aEntry);
- # case TableColumnController.END_DATE :
- # return endDateColumn(aEntry);
- # case TableColumnController.TITLE : return XMLElement.decodeString(aEntry.getTitle());
- # case TableColumnController.STATUS : return getEntryIcon(aEntry);
- # case TableColumnController.THUMBNAIL :
- # return thumbnailColumn(aEntry);
- # case TableColumnController.SELLER :
- # return aEntry.getSellerName();
- # case TableColumnController.COMMENT :
- # String comment = aEntry.getComment();
- # return(comment==null? "" :comment);
- # case TableColumnController.BIDDER :
- # String bidder = aEntry.getHighBidder();
- # if (bidder != null && bidder.length() != 0)
- # return bidder;
- # return "--";
- # case TableColumnController.FIXED_PRICE :
- # Currency bin = aEntry.getBuyNow();
- # if (bin.isNull())
- # return "--";
- # return bin;
- # case TableColumnController.SHIPPING_INSURANCE :
- # Currency ship = aEntry.getShippingWithInsurance();
- # if (ship.isNull())
- # return "--";
- # return ship;
- # case TableColumnController.ITEM_LOCATION :
- # return aEntry.getItemLocation();
- # case TableColumnController.BIDCOUNT :
- # if (aEntry.getNumBidders() < 0)
- # return "(FP)";
- # return Integer.toString(aEntry.getNumBidders());
- # case TableColumnController.JUSTPRICE :
- # return aEntry.getCurrentPrice();
- # case TableColumnController.SELLER_FEEDBACK :
- # return seller.getFeedback();
- # case TableColumnController.SELLER_POSITIVE_FEEDBACK :
- # String fbp = seller.getPositivePercentage();
- # return (fbp == null || fbp.length() == 0) ? "--" :fbp;
- # case TableColumnController.CUR_TOTAL :
- # return priceWithShippingColumn(aEntry);
- # case TableColumnController.SNIPE_TOTAL :
- # return formatTotalSnipe(aEntry, errorNote);
- #
- #
|