import webbrowser
import traceback
import pkg_resources
+import socks
+import socket
from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup
from twitter.api import *
from twitter.oauth_dance import oauth_dance
from twitter.util import printNicely
+from urllib import error
+
from .draw import *
from .colors import *
from .config import *
'--image-on-term',
action='store_true',
help='Display all image on terminal.')
+ parser.add_argument(
+ '-ph',
+ '--proxy-host',
+ help='Use HTTP/SOCKS proxy for network connections.')
+ parser.add_argument(
+ '-pp',
+ '--proxy-port',
+ default=8080,
+ help='HTTP/SOCKS proxy port (Default: 8080).')
+ parser.add_argument(
+ '-pt',
+ '--proxy-type',
+ default='SOCKS5',
+ help='Proxy type (HTTP, SOCKS4, SOCKS5; Default: SOCKS5).')
return parser.parse_args()
# Kill old thread
g['stream_stop'] = True
args.track_keywords = keyword
+ # Reset prefix
+ g['PREFIX'] = u2str(emojize(c['PREFIX']))
# Start new thread
th = threading.Thread(
target=stream,
elif target == 'mine':
# Kill old thread
g['stream_stop'] = True
+ # Reset prefix
+ g['PREFIX'] = u2str(emojize(c['PREFIX']))
# Start new thread
th = threading.Thread(
target=stream,
elif target == 'list':
owner, slug = get_slug()
# Force python 2 not redraw readline buffer
- g['cmd'] = '/'.join([owner, slug])
+ g['PREFIX'] = g['cmd'] = '/'.join([owner, slug])
printNicely(light_yellow('getting list members ...'))
# Get members
t = Twitter(auth=authen())
if args.ignore:
printNicely(red('Ignore: ' + str(len(args.ignore)) + ' people.'))
printNicely('')
- except Exception:
+ except:
debug_option()
printNicely(red('Sorry I can\'t understand.'))
value = get_default_config(key)
line = ' ' * 2 + green(key) + ': ' + light_magenta(value)
printNicely(line)
- except Exception as e:
- printNicely(red(e))
+ except:
+ debug_option()
+ printNicely(red('Just can not get the default.'))
# Delete specific config key in config file
elif len(g['stuff'].split()) == 2 and g['stuff'].split()[-1] == 'drop':
key = g['stuff'].split()[0]
try:
delete_config(key)
printNicely(green('Config key is dropped.'))
- except Exception as e:
- printNicely(red(e))
+ except:
+ debug_option()
+ printNicely(red('Just can not drop the key.'))
# Set specific config
elif len(g['stuff'].split()) == 3 and g['stuff'].split()[1] == '=':
key = g['stuff'].split()[0]
return
try:
set_config(key, value)
- # Apply theme immediately
+ # Keys that needs to be apply immediately
if key == 'THEME':
c['THEME'] = reload_theme(value, c['THEME'])
g['decorated_name'] = lambda x: color_func(
c['DECORATED_NAME'])('[' + x + ']: ')
+ elif key == 'PREFIX':
+ g['PREFIX'] = u2str(emojize(c['PREFIX']))
reload_config()
printNicely(green('Updated successfully.'))
- except Exception as e:
- printNicely(red(e))
+ except:
+ debug_option()
+ printNicely(red('Just can not set the key.'))
else:
printNicely(light_magenta('Sorry I can\'s understand.'))
# Initial
args = parse_arguments()
try:
+ if args.proxy_host:
+ # Setup proxy by monkeypatching the standard lib
+ # You might want to check https://github.com/Anorov/PySocks for further
+ # further info.
+ if args.proxy_type.lower() == "socks5" or not args.proxy_type:
+ socks.set_default_proxy(socks.SOCKS5, args.proxy_host, int(args.proxy_port))
+ elif args.proxy_type.lower() == "http":
+ socks.set_default_proxy(socks.HTTP, args.proxy_host, int(args.proxy_port))
+ elif args.proxy_type.lower() == "socks4":
+ socks.set_default_proxy(socks.SOCKS4, args.proxy_host, int(args.proxy_port))
+ else:
+ printNicely(magenta("Sorry, wrong proxy type specified! Aborting..."))
+ sys.exit()
+ socket.socket = socks.socksocket
init(args)
except TwitterHTTPError:
printNicely('')
printNicely(magenta("Let's try again later."))
save_history()
sys.exit()
+ except (ConnectionRefusedError, socks.ProxyConnectionError, error.URLError):
+ printNicely(
+ magenta("There seems to be a connection problem."))
+ printNicely(
+ magenta("You might want to check your proxy settings (host, port and type)!"))
+ save_history()
+ sys.exit()
+
# Spawn stream thread
th = threading.Thread(
target=stream,