Scallywag/Scallywag

145 lines
4.6 KiB
Python
Executable File

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
from rsrc.Scraper import proxylister, searcher
from configparser import ConfigParser
import subprocess
import os
class Config:
def __init__(self, config_file):
settings = ConfigParser(allow_no_value=True)
settings.read(config_file)
# the url used to list out proxies
self.proxylist_url = settings.get("list_source", "piratebay_proxy_list")
class Scallywag:
def on_btnRefresh_clicked( self, object, data=None ):
# TODO implement refresh
self.status("refresh pressed")
def on_btnSearch_clicked( self, object, data=None ):
self.status("search pressed")
# clear the results_store
# seeders, leechers, size, name
self.results_store.clear()
for row in self.results_store:
self.results_store.remove(row)
for column in self.results_tree_view.get_columns():
self.results_tree_view.remove_column(column)
# associate new results_store with the treeview
self.results_tree_view.set_model(self.results_store)
# add search result entries to the results store
search_field = self.builder.get_object("txtSearch")
search_terms = search_field.get_text()
for result in self.get_results( search_terms ):
print( result.__str__() )
self.results_store.append( [ result.seeders, result.leechers, result.size, result.title, result.author, result.url ])
for i, col_title in enumerate( [ "Seeders", "Leechers", "Size", "Title", "Author", "Url" ] ):
# renderer creation
renderer = Gtk.CellRendererText()
# text is column number
column = Gtk.TreeViewColumn(col_title, renderer, text=i)
# add column to tvw
self.results_tree_view.append_column(column)
def get_current_proxy(self):
return self.mnuPulldown.get_active_text()
def on_mnuPulldown_changed(self, object, data=None ):
new_proxy = self.get_current_proxy()
self.config.proxy = new_proxy
self.status( str.format( "Changed PirateBay proxy site to {0}", self.config.proxy ) )
def get_results(self, search_terms):
self.searcher = searcher.Scraper( self.config )
results = self.searcher.get_results( search_terms )
self.status("{0} results found.".format( len(results) ) )
for result in results:
yield result
def on_btnDownload_clicked( self, object, data=None, **args ):
selection = self.results_tree_view.get_selection()
(tm, ti) = selection.get_selected()
url = tm.get_value(ti, 5)
magnet = self.searcher.get_magnet( url )
subprocess.Popen( "xdg-open {0}".format(magnet), shell=True )
self.status("Opening Magnet with xdg-open...")
def status( self, msg ):
# GTK team, your API is bullshit.
self.statusbar.push( self.statusbar.get_context_id("stsBar"), msg )
def on_winMain_destroy(self, object, data=None):
print("quit by exiting")
Gtk.main_quit()
def __init__(self, configFile):
self.config = Config( configFile )
self.gladefile = "{0}/rsrc/gui/winMain.glade".format(os.path.dirname(os.path.realpath(__file__)))
self.builder = Gtk.Builder()
self.builder.add_from_file(self.gladefile)
self.builder.connect_signals(self)
self.window = self.builder.get_object("winMain")
self.statusbar = self.builder.get_object("stsBar")
self.status("Choose your PirateBay Proxy")
self.mnuPulldown = self.builder.get_object("mnuPulldown")
self.proxy_store = Gtk.ListStore(str)
self.mnuPulldown.set_model(self.proxy_store)
self.proxylister = proxylister.Scraper( self.config )
self.status("Fetching proxies...")
print("Fetching proxies...")
for proxy in self.proxylister.get_proxies():
print("Found: {0}".format( proxy ))
self.proxy_store.append([proxy])
print("Proxy fetch complete.")
self.mnuPulldown.set_active(0)
self.results_store = Gtk.ListStore(int, int, str, str, str, str)
self.window.set_focus(self.builder.get_object("txtSearch"))
# treeview
self.results_tree_view = self.builder.get_object("tvwResults")
# wtf. why doesn't this work?
self.results_tree_view.connect("row-activated", self.on_btnDownload_clicked )
self.window.show_all()
if __name__ == "__main__":
parent_dir = os.path.dirname(os.path.realpath(__file__))
main = Scallywag("{0}/config.ini".format(parent_dir))
Gtk.main()