def __init__(self): super(ComicStreamerConfig, self).__init__() self.csfolder = AppFolders.settings() # make sure folder exisits if not os.path.exists(self.csfolder): os.makedirs(self.csfolder) # set up initial values self.filename = os.path.join(self.csfolder, "settings") self.configspec = io.StringIO(ComicStreamerConfig.configspec) self.encoding = "UTF8" # since some stuff in the configobj has to happen during object initialization, # use a temporary delegate, and them merge it into self tmp = ConfigObj(self.filename, configspec=self.configspec, encoding=self.encoding) validator = Validator() tmp.validate(validator, copy=True) # set up the install ID if tmp['general']['install_id'] == '': tmp['general']['install_id'] = uuid.uuid4().hex #set up the cookie secret if tmp['security']['cookie_secret'] == '': tmp['security']['cookie_secret'] = base64.b64encode( uuid.uuid4().bytes + uuid.uuid4().bytes) # normalize the folder list tmp['general']['folder_list'] = [ os.path.abspath(os.path.normpath(unicode(a))) for a in tmp['general']['folder_list'] ] self.merge(tmp) if not os.path.exists(self.filename): self.write() # not sure if this belongs here: # if mac app, and no unrar in path, add the one from the app bundle if getattr(sys, 'frozen', None) and platform.system() == "Darwin": if which("unrar") is None: addtopath(AppFolders.appBase())
def __init__(self): super(ComicStreamerConfig, self).__init__() self.csfolder = AppFolders.settings() # make sure folder exisits if not os.path.exists(self.csfolder): os.makedirs(self.csfolder) # set up initial values self.filename = os.path.join(self.csfolder, "settings") self.configspec = io.StringIO(ComicStreamerConfig.configspec) self.encoding = "UTF8" # since some stuff in the configobj has to happen during object initialization, # use a temporary delegate, and them merge it into self tmp = ConfigObj( self.filename, configspec=self.configspec, encoding=self.encoding) validator = Validator() tmp.validate(validator, copy=True) # set up the install ID if tmp['general']['install_id'] == '': tmp['general']['install_id'] = uuid.uuid4().hex #set up the cookie secret if tmp['security']['cookie_secret'] == '': tmp['security']['cookie_secret'] = base64.b64encode( uuid.uuid4().bytes + uuid.uuid4().bytes) # normalize the folder list tmp['general']['folder_list'] = [ os.path.abspath(os.path.normpath(str(a))) for a in tmp['general']['folder_list'] ] self.merge(tmp) if not os.path.exists(self.filename): self.write() # not sure if this belongs here: # if mac app, and no unrar in path, add the one from the app bundle if getattr(sys, 'frozen', None) and platform.system() == "Darwin": if which("unrar") is None: addtopath(AppFolders.appBase())
def __init__(self, config, opts): utils.fix_output_encoding() self.config = config self.opts = opts self.port = self.config['general']['port'] self.webroot = self.config['general']['webroot'] self.comicArchiveList = [] #if len(self.config['general']['folder_list']) == 0: # logging.error("No folders on either command-line or config file. Quitting.") # sys.exit(-1) self.dm = DataManager() self.library = Library(self.dm.Session) if opts.reset or opts.reset_and_run: logging.info( "Deleting any existing database!") self.dm.delete() # quit on a standard reset if opts.reset: sys.exit(0) try: self.dm.create() except SchemaVersionException as e: msg = "Couldn't open database. Probably the schema has changed." logging.error(msg) utils.alert("Schema change", msg) sys.exit(-1) try: self.listen(self.port, no_keep_alive = True) except Exception as e: logging.error(e) msg = "Couldn't open socket on port {0}. (Maybe ComicStreamer is already running?) Quitting.".format(self.port) logging.error(msg) utils.alert("Port not available", msg) sys.exit(-1) logging.info( "Stream server running on port {0}...".format(self.port)) #http_server = tornado.httpserver.HTTPServer(self, no_keep_alive = True, ssl_options={ # "certfile": "server.crt", # "keyfile": "server.key", #}) #http_server.listen(port+1) self.version = csversion.version handlers = [ # Web Pages (self.webroot + r"/", MainHandler), (self.webroot + r"/(.*)\.html", GenericPageHandler), (self.webroot + r"/about", AboutPageHandler), (self.webroot + r"/control", ControlPageHandler), (self.webroot + r"/configure", ConfigPageHandler), (self.webroot + r"/log", LogPageHandler), (self.webroot + r"/comiclist/browse", ComicListBrowserHandler), (self.webroot + r"/folders/browse(/.*)*", FoldersBrowserHandler), (self.webroot + r"/entities/browse(/.*)*", EntitiesBrowserHandler), (self.webroot + r"/comic/([0-9]+)/reader", ReaderHandler), (self.webroot + r"/login", LoginHandler), # Data (self.webroot + r"/dbinfo", DBInfoAPIHandler), (self.webroot + r"/version", VersionAPIHandler), (self.webroot + r"/deleted", DeletedAPIHandler), (self.webroot + r"/comic/([0-9]+)", ComicAPIHandler), (self.webroot + r"/comiclist", ComicListAPIHandler), (self.webroot + r"/comic/([0-9]+)/page/([0-9]+|clear)/bookmark", ComicBookmarkAPIHandler ), (self.webroot + r"/comic/([0-9]+)/page/([0-9]+)", ComicPageAPIHandler ), (self.webroot + r"/comic/([0-9]+)/thumbnail", ThumbnailAPIHandler), (self.webroot + r"/comic/([0-9]+)/file", FileAPIHandler), (self.webroot + r"/entities(/.*)*", EntityAPIHandler), (self.webroot + r"/folders(/.*)*", FolderAPIHandler), (self.webroot + r"/command", CommandAPIHandler), (self.webroot + r"/scanstatus", ScanStatusAPIHandler), #(r'/favicon.ico', tornado.web.StaticFileHandler, {'path': os.path.join(AppFolders.appBase(), "static","images")}), (self.webroot + r'/.*', UnknownHandler), ] settings = dict( template_path=os.path.join(AppFolders.appBase(), "templates"), static_path=os.path.join(AppFolders.appBase(), "static"), static_url_prefix=self.webroot + "/static/", debug=True, #autoreload=False, login_url=self.webroot + "/login", cookie_secret=self.config['security']['cookie_secret'], xsrf_cookies=True, ) tornado.web.Application.__init__(self, handlers, **settings) if not opts.no_monitor: logging.debug("Going to scan the following folders:") for l in self.config['general']['folder_list']: logging.debug(u" {0}".format(repr(l))) self.monitor = Monitor(self.dm, self.config['general']['folder_list']) self.monitor.start() self.monitor.scan() self.bookmarker = Bookmarker(self.dm) self.bookmarker.start() if opts.launch_browser and self.config['general']['launch_browser']: if ((platform.system() == "Linux" and os.environ.has_key('DISPLAY')) or (platform.system() == "Darwin" and not os.environ.has_key('SSH_TTY')) or platform.system() == "Windows"): webbrowser.open("http://localhost:{0}".format(self.port), new=0)
def __init__(self, config, opts): utils.fix_output_encoding() self.config = config self.opts = opts self.port = self.config['general']['port'] self.webroot = self.config['general']['webroot'] self.comicArchiveList = [] #if len(self.config['general']['folder_list']) == 0: # logging.error("No folders on either command-line or config file. Quitting.") # sys.exit(-1) self.dm = DataManager() self.library = Library(self.dm.Session) if opts.reset or opts.reset_and_run: logging.info("Deleting any existing database!") self.dm.delete() # quit on a standard reset if opts.reset: sys.exit(0) try: self.dm.create() except SchemaVersionException as e: msg = "Couldn't open database. Probably the schema has changed." logging.error(msg) utils.alert("Schema change", msg) sys.exit(-1) try: self.listen(self.port, no_keep_alive=True) except Exception as e: logging.error(e) msg = "Couldn't open socket on port {0}. (Maybe ComicStreamer is already running?) Quitting.".format( self.port) logging.error(msg) utils.alert("Port not available", msg) sys.exit(-1) logging.info("Stream server running on port {0}...".format(self.port)) #http_server = tornado.httpserver.HTTPServer(self, no_keep_alive = True, ssl_options={ # "certfile": "server.crt", # "keyfile": "server.key", #}) #http_server.listen(port+1) self.version = csversion.version handlers = [ # Web Pages (self.webroot + r"/", MainHandler), (self.webroot + r"/(.*)\.html", GenericPageHandler), (self.webroot + r"/about", AboutPageHandler), (self.webroot + r"/control", ControlPageHandler), (self.webroot + r"/configure", ConfigPageHandler), (self.webroot + r"/log", LogPageHandler), (self.webroot + r"/comiclist/browse", ComicListBrowserHandler), (self.webroot + r"/folders/browse(/.*)*", FoldersBrowserHandler), (self.webroot + r"/entities/browse(/.*)*", EntitiesBrowserHandler), (self.webroot + r"/comic/([0-9]+)/reader", ReaderHandler), (self.webroot + r"/login", LoginHandler), # Data (self.webroot + r"/dbinfo", DBInfoAPIHandler), (self.webroot + r"/version", VersionAPIHandler), (self.webroot + r"/deleted", DeletedAPIHandler), (self.webroot + r"/comic/([0-9]+)", ComicAPIHandler), (self.webroot + r"/comiclist", ComicListAPIHandler), (self.webroot + r"/comic/([0-9]+)/page/([0-9]+|clear)/bookmark", ComicBookmarkAPIHandler), (self.webroot + r"/comic/([0-9]+)/page/([0-9]+)", ComicPageAPIHandler), (self.webroot + r"/comic/([0-9]+)/thumbnail", ThumbnailAPIHandler), (self.webroot + r"/comic/([0-9]+)/file", FileAPIHandler), (self.webroot + r"/entities(/.*)*", EntityAPIHandler), (self.webroot + r"/folders(/.*)*", FolderAPIHandler), (self.webroot + r"/command", CommandAPIHandler), (self.webroot + r"/scanstatus", ScanStatusAPIHandler), #(r'/favicon.ico', tornado.web.StaticFileHandler, {'path': os.path.join(AppFolders.appBase(), "static","images")}), (self.webroot + r'/.*', UnknownHandler), ] settings = dict( template_path=os.path.join(AppFolders.appBase(), "templates"), static_path=os.path.join(AppFolders.appBase(), "static"), static_url_prefix=self.webroot + "/static/", debug=True, #autoreload=False, login_url=self.webroot + "/login", cookie_secret=self.config['security']['cookie_secret'], xsrf_cookies=True, ) tornado.web.Application.__init__(self, handlers, **settings) if not opts.no_monitor: logging.debug("Going to scan the following folders:") for l in self.config['general']['folder_list']: logging.debug(u" {0}".format(repr(l))) self.monitor = Monitor(self.dm, self.config['general']['folder_list']) self.monitor.start() self.monitor.scan() self.bookmarker = Bookmarker(self.dm) self.bookmarker.start() if opts.launch_browser and self.config['general']['launch_browser']: if ((platform.system() == "Linux" and os.environ.has_key('DISPLAY')) or (platform.system() == "Darwin" and not os.environ.has_key('SSH_TTY')) or platform.system() == "Windows"): webbrowser.open("http://localhost:{0}".format(self.port), new=0)