예제 #1
0
    def __exit__(self, type, value, traceback):
        xbmc.log("HandleAbort exit")

        settings = util.getSettings()
        settings.setSetting(util.SETTING_RCB_SCRAPEONSTARTUPACTION, 'nothing')

        #restore original scraping mode
        settings.setSetting(util.SETTING_RCB_SCRAPINGMODE, self.orig_scraping_mode)
예제 #2
0
def run():
    print("Initializing settings")
    initSettings.run()
    settings = getSettings()
    print("Making output file")
    if not os.path.exists(settings["videoOut"]):
        os.mkdir(settings["videoOut"])
    install("pyopenssl")
예제 #3
0
    def __enter__(self):
        xbmc.log("HandleAbort enter")

        settings = util.getSettings()
        settings.setSetting(util.SETTING_RCB_SCRAPEONSTARTUPACTION, 'update')

        #set scraping mode to accurate
        self.orig_scraping_mode = settings.getSetting(util.SETTING_RCB_SCRAPINGMODE)
        settings.setSetting(util.SETTING_RCB_SCRAPINGMODE, util.SCRAPING_OPTION_AUTO_ACCURATE_TXT)

        return True
예제 #4
0
	def launchGame(self, param):
		import launcher, util
		from gamedatabase import GameDataBase
		from config import Config
		
		gdb = GameDataBase(util.getAddonDataPath())
		gdb.connect()
		
		gameId = int(param.replace('launchid=', ''))
		
		config = Config(None)
		statusOk, errorMsg = config.readXml()
		
		settings = util.getSettings()
		
		gui = dummyGUI()
		
		launcher.launchEmu(gdb, gui, gameId, config, settings, None)
예제 #5
0
	def gatherWidgetData(self, param):
		print 'start gatherWidgetData'
		import util, helper
		from gamedatabase import Game, GameDataBase, File
		from config import Config, RomCollection
		
		gdb = GameDataBase(util.getAddonDataPath())
		gdb.connect()
		
		doImport, errorMsg = gdb.checkDBStructure()
		if(doImport) > 0:
			print "RCB: No database available. Won't gather any data."
			gdb.close()
			return
				
		#cache lookup tables
		yearDict = helper.cacheYears(gdb)
		publisherDict = helper.cachePublishers(gdb)
		developerDict = helper.cacheDevelopers(gdb)
		reviewerDict = helper.cacheReviewers(gdb)
		genreDict = helper.cacheGenres(gdb)
				
		limit = int(param.replace('limit=', ''))
		games = Game(gdb).getMostPlayedGames(limit)
		print 'most played games: %s' %games
		
		config = Config(None)
		statusOk, errorMsg = config.readXml()
		
		settings = util.getSettings()
		
		import xbmcgui
		count = 0
		for gameRow in games:
		
			count += 1
			try:
				print "Gathering data for rom no %i: %s" %(count, gameRow[util.ROW_NAME])
				
				romCollection = config.romCollections[str(gameRow[util.GAME_romCollectionId])]				
		
				#get artwork that is chosen to be shown in gamelist
				files = File(gdb).getFilesByParentIds(gameRow[util.ROW_ID], gameRow[util.GAME_romCollectionId], gameRow[util.GAME_publisherId], gameRow[util.GAME_developerId])
				fileDict = helper.cacheFiles(files)
				files = helper.getFilesByControl_Cached(gdb, romCollection.imagePlacingMain.fileTypesForGameList, gameRow[util.ROW_ID], gameRow[util.GAME_publisherId], gameRow[util.GAME_developerId], gameRow[util.GAME_romCollectionId], fileDict)		
				if(files != None and len(files) != 0):
					thumb = files[0]
				else:
					thumb = ""
					
				files = helper.getFilesByControl_Cached(gdb, romCollection.imagePlacingMain.fileTypesForMainViewBackground, gameRow[util.ROW_ID], gameRow[util.GAME_publisherId], gameRow[util.GAME_developerId], gameRow[util.GAME_romCollectionId], fileDict)		
				if(files != None and len(files) != 0):
					fanart = files[0]
				else:
					fanart = ""
				
				description = gameRow[util.GAME_description]
				if(description == None):
					description = ""
				
				year = helper.getPropertyFromCache(gameRow, yearDict, util.GAME_yearId, util.ROW_NAME)
				publisher = helper.getPropertyFromCache(gameRow, publisherDict, util.GAME_publisherId, util.ROW_NAME)
				developer = helper.getPropertyFromCache(gameRow, developerDict, util.GAME_developerId, util.ROW_NAME)
				genre = genreDict[gameRow[util.ROW_ID]]
				
				maxplayers = helper.saveReadString(gameRow[util.GAME_maxPlayers])
				rating = helper.saveReadString(gameRow[util.GAME_rating])
				votes = helper.saveReadString(gameRow[util.GAME_numVotes])
				url = helper.saveReadString(gameRow[util.GAME_url])
				region = helper.saveReadString(gameRow[util.GAME_region])
				media = helper.saveReadString(gameRow[util.GAME_media])				
				perspective = helper.saveReadString(gameRow[util.GAME_perspective])
				controllertype = helper.saveReadString(gameRow[util.GAME_controllerType])
				originaltitle = helper.saveReadString(gameRow[util.GAME_originalTitle])
				alternatetitle = helper.saveReadString(gameRow[util.GAME_alternateTitle])
				translatedby = helper.saveReadString(gameRow[util.GAME_translatedBy])
				version = helper.saveReadString(gameRow[util.GAME_version])
				playcount = helper.saveReadString(gameRow[util.GAME_launchCount])
				
				#get launch command
				filenameRows = File(gdb).getRomsByGameId(gameRow[util.ROW_ID])
				
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Id" %count, str(gameRow[util.ROW_ID]))
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Console" %count, romCollection.name)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Title" %count, gameRow[util.ROW_NAME])
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Thumb" %count, thumb)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Fanart" %count, fanart)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Plot" %count, description)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Year" %count, year)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Publisher" %count, publisher)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Developer" %count, developer)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Genre" %count, genre)
				
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Maxplayers" %count, maxplayers)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Region" %count, region)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Media" %count, media)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Perspective" %count, perspective)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Controllertype" %count, controllertype)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Playcount" %count, playcount)				
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Rating" %count, rating)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Votes" %count, votes)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Url" %count, url)				
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Originaltitle" %count, originaltitle)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Alternatetitle" %count, alternatetitle)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Translatedby" %count, translatedby)
				xbmcgui.Window(10000).setProperty("MostPlayedROM.%d.Version" %count, version)
								
			except Exception, (exc):
				print 'RCB: Error while getting most played games: ' +str(exc)
예제 #6
0
    util.install("python-dateutil")
    from dateutil import tz

try:
    import psutil
except:
    util.install("psutil")
    import psutil

try:
    import cv2
except:
    util.install("opencv-contrib-python")
    import cv2

settings = util.getSettings()
startDelay = settings["startDelay"]
recordingTime = settings["recordingTime"]
showImages = settings["showImages"]
timezone = tz.gettz(settings["timeZone"])

cap = cv2.VideoCapture(0)
backSub = cv2.createBackgroundSubtractorKNN()
activeState = False
active = False
armed = False
timer = None
startDelayTimer = None
notifacationThread = None
out = None
frame = None
예제 #7
0
class NfoWriter(RcbXmlReaderWriter):
    Settings = util.getSettings()

    def __init__(self):
        pass

    def exportLibrary(self, gdb, romCollections):
        Logutil.log("Begin exportLibrary", util.LOG_LEVEL_INFO)

        progressDialog = dialogprogress.ProgressDialogGUI()
        #32169 = Export library...
        progressDialog.create(util.localize(32169))
        continueExport = True
        rccount = 1

        for romCollection in list(romCollections.values()):
            #32170 = Exporting Rom Collection
            messageRomCollections = "%s (%i / %i): %s" % (util.localize(
                32170), rccount, len(romCollections), romCollection.name)
            rccount = rccount + 1

            Logutil.log("export Rom Collection: " + romCollection.name,
                        util.LOG_LEVEL_INFO)
            gameCount = 1

            #get all games for this Rom Collection
            games = GameView(gdb).getFilteredGames(romCollection.id, 0, 0, 0,
                                                   0, 0, 0, 0, 0, '0 = 0', '',
                                                   0)
            progressDialog.itemCount = len(games) + 1

            for game in games:
                #32171 = Export game
                message = "%s[CR]%s: %s" % (messageRomCollections,
                                            util.localize(32171),
                                            str(game[GameView.COL_NAME]))
                continueExport = progressDialog.writeMsg(message, gameCount)
                if not continueExport:
                    Logutil.log('Game export canceled by user',
                                util.LOG_LEVEL_INFO)
                    break

                gameCount = gameCount + 1

                romfiles = File(gdb).getRomsByGameId(game[GameView.COL_ID])
                first_rom = romfiles[0]

                gamenameFromFile = romCollection.getGamenameFromFilename(
                    first_rom[0])
                artworkfiles = {}
                artworkurls = []

                self.createNfoFromDesc(game, romCollection.name, first_rom[0],
                                       gamenameFromFile, artworkfiles,
                                       artworkurls)

        progressDialog.writeMsg("", -1)
        del progressDialog

    def createNfoFromDesc(self, game, platform, romFile, gameNameFromFile,
                          artworkfiles, artworkurls):

        Logutil.log("Begin createNfoFromDesc", util.LOG_LEVEL_INFO)

        nfoFile = self.getNfoFilePath(platform, romFile, gameNameFromFile)
        if nfoFile == '':
            log.debug(u"Not writing NFO file for {0}".format(gameNameFromFile))
            return

        root = ET.Element('game')
        #reference to eventually existing nfo
        existing_nfo = None

        #Read info from existing nfo file. New info and existing info will be merged
        if xbmcvfs.exists(nfoFile):
            fh = xbmcvfs.File(nfoFile)
            existing_nfo = ET.fromstring(fh.read())
            fh.close()

        self.write_from_db_or_nfo(game[GameView.COL_NAME], existing_nfo, root,
                                  'title')
        self.write_from_db_or_nfo(game[GameView.COL_originalTitle],
                                  existing_nfo, root, 'originalTitle')
        self.write_from_db_or_nfo(game[GameView.COL_alternateTitle],
                                  existing_nfo, root, 'alternateTitle')
        self.write_from_db_or_nfo(platform, existing_nfo, root, 'platform')
        self.write_from_db_or_nfo(game[GameView.COL_description], existing_nfo,
                                  root, 'plot')
        self.write_from_db_or_nfo(game[GameView.COL_publisher], existing_nfo,
                                  root, 'publisher')
        self.write_from_db_or_nfo(game[GameView.COL_developer], existing_nfo,
                                  root, 'developer')
        self.write_from_db_or_nfo(game[GameView.COL_year], existing_nfo, root,
                                  'year')
        self.write_from_db_or_nfo(game[GameView.COL_url], existing_nfo, root,
                                  'detailUrl')
        self.write_from_db_or_nfo(game[GameView.COL_maxPlayers], existing_nfo,
                                  root, 'maxPlayer')
        self.write_from_db_or_nfo(game[GameView.COL_region], existing_nfo,
                                  root, 'region')
        self.write_from_db_or_nfo(game[GameView.COL_media], existing_nfo, root,
                                  'media')
        self.write_from_db_or_nfo(game[GameView.COL_perspective], existing_nfo,
                                  root, 'perspective')
        self.write_from_db_or_nfo(game[GameView.COL_controllerType],
                                  existing_nfo, root, 'controller')
        self.write_from_db_or_nfo(game[GameView.COL_version], existing_nfo,
                                  root, 'version')
        self.write_from_db_or_nfo(game[GameView.COL_rating], existing_nfo,
                                  root, 'rating')
        self.write_from_db_or_nfo(game[GameView.COL_numVotes], existing_nfo,
                                  root, 'votes')
        self.write_from_db_or_nfo(game[GameView.COL_isFavorite], existing_nfo,
                                  root, 'isFavorite')
        self.write_from_db_or_nfo(game[GameView.COL_launchCount], existing_nfo,
                                  root, 'launchCount')
        """
        for elem in ['title', 'originalTitle', 'alternateTitle', 'platform', 'plot', 'publisher', 'developer', 'year',
                     'detailUrl', 'maxPlayer', 'region', 'media', 'perspective', 'controller', 'version', 'rating',
                     'votes', 'isFavorite', 'launchCount']:
            elemText = locals()[elem]
            #if new info is empty, check if the existing file has it
            if existing_nfo and not elemText:
                try:
                    elemText = existing_nfo.find(elem).text
                except:
                    pass
            ET.SubElement(root, elem).text = elemText
        """

        genreList = []
        if game[GameView.COL_genre]:
            for genre in game[GameView.COL_genre].split(', '):
                if genre != 'None':
                    genreList.append(genre)

        #if no genre was given, use genres from existing file
        if existing_nfo and len(genreList) == 0:
            for genre in existing_nfo.findall("genre"):
                genreList.append(genre.text)

        for genre in genreList:
            ET.SubElement(root, 'genre').text = genre

        for artworktype in list(artworkfiles.keys()):

            local = ''
            online = ''
            try:
                local = artworkfiles[artworktype][0]
                online = artworkurls[artworktype.name]
            except:
                pass

            try:
                SubElement(root, 'thumb', {
                    'type': artworktype.name,
                    'local': local
                }).text = online
            except Exception as exc:
                Logutil.log('Error writing artwork url: ' + str(exc),
                            util.LOG_LEVEL_WARNING)

        self.writeNfoElementToFile(root, platform, romFile, gameNameFromFile,
                                   nfoFile)

    def write_from_db_or_nfo(self, value_from_db, existing_nfo, root,
                             elementname):

        val = ''
        if value_from_db:
            val = value_from_db
        else:
            if existing_nfo:
                try:
                    val = existing_nfo.find(elementname).text
                except:
                    pass
        ET.SubElement(root, elementname).text = val

    def writeNfoElementToFile(self, root, platform, romFile, gameNameFromFile,
                              nfoFile):
        # write file
        try:
            self.indentXml(root)
            tree = ElementTree(root)

            log.info(u"Writing NFO file {0}".format(nfoFile))
            localFile = util.joinPath(util.getTempDir(),
                                      os.path.basename(nfoFile))
            tree.write(localFile, encoding="UTF-8", xml_declaration=True)
            xbmcvfs.copy(localFile, nfoFile)
            xbmcvfs.delete(localFile)

        except Exception as exc:
            log.warn(u"Error: Cannot write game nfo for {0}: {1}".format(
                gameNameFromFile, exc))

    def getNfoFilePath(self, romCollectionName, romFile, gameNameFromFile):
        nfoFile = ''

        nfoFolder = self.Settings.getSetting(util.SETTING_RCB_NFOFOLDER)

        if nfoFolder != '' and nfoFolder != None:
            # Add the trailing slash that xbmcvfs.exists expects
            nfoFolder = os.path.join(os.path.dirname(nfoFolder), '')
            if not xbmcvfs.exists(nfoFolder):
                Logutil.log("Path to nfoFolder does not exist: " + nfoFolder,
                            util.LOG_LEVEL_WARNING)
            else:
                nfoFolder = os.path.join(nfoFolder, romCollectionName)
                if not os.path.exists(nfoFolder):
                    os.mkdir(nfoFolder)

                nfoFile = os.path.join(nfoFolder, gameNameFromFile + '.nfo')

        if nfoFile == '':
            romDir = os.path.dirname(romFile)
            Logutil.log('Romdir: ' + romDir, util.LOG_LEVEL_INFO)
            nfoFile = os.path.join(romDir, gameNameFromFile + '.nfo')

        log.debug(
            u"%s returns %s for %s (%s) on platform %s" %
            (__name__, nfoFile, gameNameFromFile, romFile, romCollectionName))

        return nfoFile
예제 #8
0
class NfoWriter:

    Settings = util.getSettings()

    def __init__(self):
        pass

    def exportLibrary(self, gui):
        Logutil.log("Begin exportLibrary", util.LOG_LEVEL_INFO)

        gdb = gui.gdb
        romCollections = gui.config.romCollections

        progressDialog = dialogprogress.ProgressDialogGUI()
        progressDialog.writeMsg(util.localize(32169), "", "")
        continueExport = True
        rccount = 1

        for romCollection in gui.config.romCollections.values():

            progDialogRCHeader = util.localize(32170) + " (%i / %i): %s" % (
                rccount, len(romCollections), romCollection.name)
            rccount = rccount + 1

            Logutil.log("export Rom Collection: " + romCollection.name,
                        util.LOG_LEVEL_INFO)
            gameCount = 1

            #get all games for this Rom Collection
            games = Game(gdb).getFilteredGames(romCollection.id, 0, 0, 0,
                                               False, '0 = 0')
            progressDialog.itemCount = len(games) + 1

            for gameRow in games:

                gamename = self.getGameProperty(gameRow[util.ROW_NAME])

                continueExport = progressDialog.writeMsg(
                    progDialogRCHeader,
                    util.localize(32171) + ": " + str(gamename), "", gameCount)
                if (not continueExport):
                    Logutil.log('Game export canceled by user',
                                util.LOG_LEVEL_INFO)
                    break

                gameCount = gameCount + 1

                plot = self.getGameProperty(gameRow[util.GAME_description])

                publisher = self.getGamePropertyFromCache(
                    gameRow, gui.publisherDict, util.GAME_publisherId,
                    util.ROW_NAME)
                developer = self.getGamePropertyFromCache(
                    gameRow, gui.developerDict, util.GAME_developerId,
                    util.ROW_NAME)
                year = self.getGamePropertyFromCache(gameRow, gui.yearDict,
                                                     util.GAME_yearId,
                                                     util.ROW_NAME)

                genreList = []
                try:
                    cachingOptionStr = self.Settings.getSetting(
                        util.SETTING_RCB_CACHINGOPTION)
                    if (cachingOptionStr == 'CACHEALL'):
                        genre = gui.genreDict[gameRow[util.ROW_ID]]
                    else:
                        genres = Genre(gdb).getGenresByGameId(
                            gameRow[util.ROW_ID])
                        if (genres != None):
                            for i in range(0, len(genres)):
                                genreRow = genres[i]
                                genreList.append(genreRow[util.ROW_NAME])
                except:
                    pass

                players = self.getGameProperty(gameRow[util.GAME_maxPlayers])
                rating = self.getGameProperty(gameRow[util.GAME_rating])
                votes = self.getGameProperty(gameRow[util.GAME_numVotes])
                url = self.getGameProperty(gameRow[util.GAME_url])
                region = self.getGameProperty(gameRow[util.GAME_region])
                media = self.getGameProperty(gameRow[util.GAME_media])
                perspective = self.getGameProperty(
                    gameRow[util.GAME_perspective])
                controller = self.getGameProperty(
                    gameRow[util.GAME_controllerType])
                originalTitle = self.getGameProperty(
                    gameRow[util.GAME_originalTitle])
                alternateTitle = self.getGameProperty(
                    gameRow[util.GAME_alternateTitle])
                version = self.getGameProperty(gameRow[util.GAME_version])

                #user settings
                isFavorite = self.getGameProperty(
                    gameRow[util.GAME_isFavorite])
                launchCount = self.getGameProperty(
                    gameRow[util.GAME_launchCount])

                romFiles = File(gdb).getRomsByGameId(gameRow[util.ROW_ID])
                romFile = ''
                if (romFiles != None and len(romFiles) > 0):
                    romFile = romFiles[0][0]
                gamenameFromFile = helper.getGamenameFromFilename(
                    romFile, romCollection)
                artworkfiles = {}
                artworkurls = []

                self.createNfoFromDesc(
                    gamename, plot, romCollection.name, publisher, developer,
                    year, players, rating, votes, url, region, media,
                    perspective, controller, originalTitle, alternateTitle,
                    version, genreList, isFavorite, launchCount, romFile,
                    gamenameFromFile, artworkfiles, artworkurls)

        progressDialog.writeMsg("", "", "", -1)
        del progressDialog

    def createNfoFromDesc(self, gamename, plot, romCollectionName, publisher,
                          developer, year, players, rating, votes, url, region,
                          media, perspective, controller, originalTitle,
                          alternateTitle, version, genreList, isFavorite,
                          launchCount, romFile, gameNameFromFile, artworkfiles,
                          artworkurls):

        Logutil.log("Begin createNfoFromDesc", util.LOG_LEVEL_INFO)

        root = Element('game')
        SubElement(root, 'title').text = gamename
        SubElement(root, 'originalTitle').text = originalTitle
        SubElement(root, 'alternateTitle').text = alternateTitle
        SubElement(root, 'platform').text = romCollectionName
        SubElement(root, 'plot').text = plot
        SubElement(root, 'publisher').text = publisher
        SubElement(root, 'developer').text = developer
        SubElement(root, 'year').text = year

        for genre in genreList:
            SubElement(root, 'genre').text = str(genre)

        SubElement(root, 'detailUrl').text = url
        SubElement(root, 'maxPlayer').text = players
        SubElement(root, 'region').text = region
        SubElement(root, 'media').text = media
        SubElement(root, 'perspective').text = perspective
        SubElement(root, 'controller').text = controller
        SubElement(root, 'version').text = version
        SubElement(root, 'rating').text = rating
        SubElement(root, 'votes').text = votes

        SubElement(root, 'isFavorite').text = isFavorite
        SubElement(root, 'launchCount').text = launchCount

        for artworktype in artworkfiles.keys():

            local = ''
            online = ''
            try:
                local = artworkfiles[artworktype][0]
                online = str(artworkurls[artworktype.name])
            except:
                pass

            try:
                SubElement(root, 'thumb', {
                    'type': artworktype.name,
                    'local': local
                }).text = online
            except Exception, (exc):
                Logutil.log('Error writing artwork url: ' + str(exc),
                            util.LOG_LEVEL_WARNING)
                pass

        #write file
        try:
            util.indentXml(root)
            tree = ElementTree(root)

            nfoFile = self.getNfoFilePath(romCollectionName, romFile,
                                          gameNameFromFile)

            if (nfoFile != ''):
                if (nfoFile.startswith('smb://')):
                    localFile = util.joinPath(util.getTempDir(),
                                              os.path.basename(nfoFile))
                    tree.write(localFile)
                    xbmcvfs.copy(localFile, nfoFile)
                    xbmcvfs.delete(localFile)
                else:
                    tree.write(nfoFile)

        except Exception, (exc):
            Logutil.log("Error: Cannot write file game.nfo: " + str(exc),
                        util.LOG_LEVEL_WARNING)
예제 #9
0
 parser.add_option("-n", "--center", action="store_true", dest="center", default=False)
 parser.add_option("-i", "--image", action="store_true", dest="image", default=False)
 options, args = parser.parse_args()
 # Make sure required arguments are present
 for req in ("width", "height", "tool"):
   if getattr(options, req, None) is None:
     print "ERROR: Missing required argument '%s'" % req
     print USAGE.strip() % argv[0]
     exit(1)
 # Check positional arguments
 if len(args) <> 1:
   print "ERROR: Missing output file"
   print USAGE.strip() % argv[0]
   exit(1)
 # Load defaults
 getSettings(CONTROL, options)
 # Show current settings
 print "Selected options:"
 for k in sorted(CONTROL.keys()):
   if not (k in ("prefix", "suffix")):
     print "  %-10s: %s" % (k, str(CONTROL[k]))
 # Get the filename
 name, ext = splitext(args[0])
 if ext == "":
   ext = ".ngc"
 filename = name + ext
 # Generate the gcode
 print "\nCreating file '%s'" % args[0]
 gcode = GCode()
 if options.center:
   centerCut(gcode)
예제 #10
0
                   dest="image",
                   default=False)
 options, args = parser.parse_args()
 # Make sure required arguments are present
 for req in ("width", "height", "tool"):
     if getattr(options, req, None) is None:
         print "ERROR: Missing required argument '%s'" % req
         print USAGE.strip() % argv[0]
         exit(1)
 # Check positional arguments
 if len(args) <> 1:
     print "ERROR: Missing output file"
     print USAGE.strip() % argv[0]
     exit(1)
 # Load defaults
 getSettings(CONTROL, options)
 # Show current settings
 print "Selected options:"
 for k in sorted(CONTROL.keys()):
     if not (k in ("prefix", "suffix")):
         print "  %-10s: %s" % (k, str(CONTROL[k]))
 # Get the filename
 name, ext = splitext(args[0])
 if ext == "":
     ext = ".ngc"
 filename = name + ext
 # Generate the gcode
 print "\nCreating file '%s'" % args[0]
 gcode = GCode()
 if options.center:
     centerCut(gcode)
예제 #11
0
class NfoWriter(RcbXmlReaderWriter):
    Settings = util.getSettings()

    def __init__(self):
        pass

    def exportLibrary(self, gdb, romCollections):
        Logutil.log("Begin exportLibrary", util.LOG_LEVEL_INFO)

        progressDialog = dialogprogress.ProgressDialogGUI()
        progressDialog.writeMsg(util.localize(32169), "", "")
        continueExport = True
        rccount = 1

        for romCollection in romCollections.values():

            progDialogRCHeader = util.localize(32170) + " (%i / %i): %s" % (
                rccount, len(romCollections), romCollection.name)
            rccount = rccount + 1

            Logutil.log("export Rom Collection: " + romCollection.name,
                        util.LOG_LEVEL_INFO)
            gameCount = 1

            #get all games for this Rom Collection
            games = GameView(gdb).getFilteredGames(romCollection.id, 0, 0, 0,
                                                   0, 0, 0, 0, 0, '0 = 0', '',
                                                   0)
            progressDialog.itemCount = len(games) + 1

            for game in games:

                continueExport = progressDialog.writeMsg(
                    progDialogRCHeader,
                    util.localize(32171) + ": " + str(game[GameView.COL_NAME]),
                    "", gameCount)
                if not continueExport:
                    Logutil.log('Game export canceled by user',
                                util.LOG_LEVEL_INFO)
                    break

                gameCount = gameCount + 1

                romfiles = File(gdb).getRomsByGameId(game[GameView.COL_ID])
                first_rom = romfiles[0]

                gamenameFromFile = romCollection.getGamenameFromFilename(
                    first_rom[0])
                artworkfiles = {}
                artworkurls = []

                self.createNfoFromDesc(game, romCollection.name, first_rom[0],
                                       gamenameFromFile, artworkfiles,
                                       artworkurls)

        progressDialog.writeMsg("", "", "", -1)
        del progressDialog

    def createNfoFromDesc(self, game, platform, romFile, gameNameFromFile,
                          artworkfiles, artworkurls):

        Logutil.log("Begin createNfoFromDesc", util.LOG_LEVEL_INFO)

        nfoFile = self.getNfoFilePath(platform, romFile, gameNameFromFile)
        if nfoFile == '':
            log.debug(u"Not writing NFO file for {0}".format(gameNameFromFile))
            return

        root = ET.Element('game')
        #reference to eventually existing nfo
        existing_nfo = None

        #Read info from existing nfo file. New info and existing info will be merged
        if xbmcvfs.exists(nfoFile):
            fh = xbmcvfs.File(nfoFile)
            existing_nfo = ET.fromstring(fh.read())
            fh.close()

        self.write_from_db_or_nfo(game[GameView.COL_NAME], existing_nfo, root,
                                  'title')
        self.write_from_db_or_nfo(game[GameView.COL_originalTitle],
                                  existing_nfo, root, 'originalTitle')
        self.write_from_db_or_nfo(game[GameView.COL_alternateTitle],
                                  existing_nfo, root, 'alternateTitle')
        self.write_from_db_or_nfo(platform, existing_nfo, root, 'platform')
        self.write_from_db_or_nfo(game[GameView.COL_description], existing_nfo,
                                  root, 'plot')
        self.write_from_db_or_nfo(game[GameView.COL_publisher], existing_nfo,
                                  root, 'publisher')
        self.write_from_db_or_nfo(game[GameView.COL_developer], existing_nfo,
                                  root, 'developer')
        self.write_from_db_or_nfo(game[GameView.COL_year], existing_nfo, root,
                                  'year')
        self.write_from_db_or_nfo(game[GameView.COL_url], existing_nfo, root,
                                  'detailUrl')
        self.write_from_db_or_nfo(game[GameView.COL_maxPlayers], existing_nfo,
                                  root, 'maxPlayer')
        self.write_from_db_or_nfo(game[GameView.COL_region], existing_nfo,
                                  root, 'region')
        self.write_from_db_or_nfo(game[GameView.COL_media], existing_nfo, root,
                                  'media')
        self.write_from_db_or_nfo(game[GameView.COL_perspective], existing_nfo,
                                  root, 'perspective')
        self.write_from_db_or_nfo(game[GameView.COL_controllerType],
                                  existing_nfo, root, 'controller')
        self.write_from_db_or_nfo(game[GameView.COL_version], existing_nfo,
                                  root, 'version')
        self.write_from_db_or_nfo(game[GameView.COL_rating], existing_nfo,
                                  root, 'rating')
        self.write_from_db_or_nfo(game[GameView.COL_numVotes], existing_nfo,
                                  root, 'votes')
        self.write_from_db_or_nfo(game[GameView.COL_isFavorite], existing_nfo,
                                  root, 'isFavorite')
        self.write_from_db_or_nfo(game[GameView.COL_launchCount], existing_nfo,
                                  root, 'launchCount')
        """
        for elem in ['title', 'originalTitle', 'alternateTitle', 'platform', 'plot', 'publisher', 'developer', 'year',
                     'detailUrl', 'maxPlayer', 'region', 'media', 'perspective', 'controller', 'version', 'rating',
                     'votes', 'isFavorite', 'launchCount']:
            elemText = locals()[elem]
            #if new info is empty, check if the existing file has it
            if existing_nfo and not elemText:
                try:
                    elemText = existing_nfo.find(elem).text
                except:
                    pass
            ET.SubElement(root, elem).text = elemText
        """

        genreList = []
        if game[GameView.COL_genre]:
            for genre in game[GameView.COL_genre].split(', '):
                if genre != 'None':
                    genreList.append(genre)

        #if no genre was given, use genres from existing file
        if existing_nfo and len(genreList) == 0:
            for genre in existing_nfo.findall("genre"):
                genreList.append(genre.text)

        for genre in genreList:
            ET.SubElement(root, 'genre').text = genre

        for artworktype in artworkfiles.keys():

            local = ''
            online = ''
            try:
                local = artworkfiles[artworktype][0]
                online = artworkurls[artworktype.name]
            except:
                pass

            try:
                SubElement(root, 'thumb', {
                    'type': artworktype.name,
                    'local': local
                }).text = online
            except Exception, (exc):
                Logutil.log('Error writing artwork url: ' + str(exc),
                            util.LOG_LEVEL_WARNING)

        self.writeNfoElementToFile(root, platform, romFile, gameNameFromFile,
                                   nfoFile)
예제 #12
0
from copy import deepcopy
from sys import argv, exit

import algorithms
import memory
import util
import time
import timeit
import matplotlib.pyplot as plt

if __name__ == '__main__':
    settings = []
    if len(argv) == 3 and argv[1] == '-f':
        file = open(argv[2], 'r')
        settings = util.getSettings(file)
        file.close()
    elif len(argv) == 5 and argv[1] == '-g':
        settings = util.generateSettings(int(argv[2]), int(argv[3]),
                                         int(argv[4]))
    elif len(argv) == 6 and argv[1] == '-g':
        settings = util.generateSettings(int(argv[2]), int(argv[3]),
                                         int(argv[4]), str(argv[5]))
    else:
        print('ERROR. Use core.py <settings file>')
        exit()

    if settings is None:
        exit()

    memory = memory.Memory(deepcopy(settings[0]), deepcopy(settings[1]))
    startOptimalAlgorithm = time.perf_counter_ns()
예제 #13
0
def run():
    settingsFileJson = util.getSettings()
    #Can't figure out how to get list input to actually translate

    settingsJson = json.loads("""{}""")
    defaultsJson = json.loads("""{
        \"videoOut\": \"../Recordings/\",
        \"fileNameFormat\": \"%d-%m-%Y_%H%M\",
        \"showImages\": false,
        \"websiteOn\": true
    }""")
    settingsList = [
        "emailAddress",  #email to send alerts from
        "alertEnabled",  #whether or not to send alerts
        "videoOut",  #location of the video files recorded example: ../Recordings/
        "fileNameFormat",  #date format for filename https://www.tutorialkart.com/python/python-datetime/python-datetime-format/
        "showImages",  #whether or not to show the images
        "alertMessage",  #message sent in alert email
        "websiteOn",  #whether or not to run the website
        "clearCommand",  #not used anymore but os specific clear cmd
        "timeZone",  #IANA timezone
        "websiteOffset",  #all website pages will be based on this directory so that no rando can easily look at your camera.
        "websitePassword"
    ]
    settingsPasswordList = [
        "emailPassword"  #sender email passowrd
    ]
    settingsNumberList = [
        "recordingTime",  #how long after motion is detected that the frames will keep getting written to a file
        "startDelay",  #how long after starting to arm
        "outfileFramerate",  #framerate of out files
        "loopDelay"  #delay in program looops
    ]
    settingsListList = [
        "alertGroup"  #list of emails to send alert to, /stop to stop prompting
    ]
    #need to implement way of making this list get taken as input

    for item in settingsList:
        if item in settingsFileJson:
            settingsJson[item] = settingsFileJson[item]
        else:
            if item in defaultsJson:
                settingsJson[item] = defaultsJson[item]
            else:
                userIn = input(item + ": ")

                userIn = userIn.strip()
                if (userIn == "true" or userIn == "yes") or userIn == "y":
                    settingsJson[item] = True
                else:
                    if (userIn == "false" or userIn == "no") or userIn == "n":
                        settingsJson[item] = False
                    else:
                        settingsJson[item] = userIn

    for item in settingsPasswordList:
        if item in settingsFileJson:
            settingsJson[item] = settingsFileJson[item]
        else:
            userIn = getpass.getpass(prompt=item + ": ")
            settingsJson[item] = userIn
            #NEED to encrypt this

    for item in settingsNumberList:
        if item in settingsFileJson:
            settingsJson[item] = settingsFileJson[item]
        else:
            if item in defaultsJson:
                seetingsJson[item] = defaultsJson[item]
            else:
                userIn = input(item + ": ")
                settingsJson[item] = float(userIn)

    outList = []
    for item in settingsListList:
        if item in settingsFileJson:
            settingsJson[item] = settingsFileJson[item]
        else:
            if item in defaultsJson:
                seetingsJson[item] = defaultsJson[item]
            else:
                while True:
                    userIn = input(item + ": ")
                    if userIn == "/stop":
                        break
                    outList += [userIn]
            settingsJson[item] = outList

    with open("settings.json", "w") as out:
        json.dump(settingsJson, out, indent=4)
예제 #14
0
class NfoWriter(RcbXmlReaderWriter):

    Settings = util.getSettings()

    def __init__(self):
        pass

    def exportLibrary(self, gdb, romCollections):
        Logutil.log("Begin exportLibrary", util.LOG_LEVEL_INFO)

        progressDialog = dialogprogress.ProgressDialogGUI()
        progressDialog.writeMsg(util.localize(32169), "", "")
        continueExport = True
        rccount = 1

        for romCollection in romCollections.values():

            progDialogRCHeader = util.localize(32170) + " (%i / %i): %s" % (
                rccount, len(romCollections), romCollection.name)
            rccount = rccount + 1

            Logutil.log("export Rom Collection: " + romCollection.name,
                        util.LOG_LEVEL_INFO)
            gameCount = 1

            #get all games for this Rom Collection
            games = Game(gdb).getGamesByFilter(romCollection.id, 0, 0, 0,
                                               False, '0 = 0')
            progressDialog.itemCount = len(games) + 1

            for game in games:

                continueExport = progressDialog.writeMsg(
                    progDialogRCHeader,
                    util.localize(32171) + ": " + str(game.name), "",
                    gameCount)
                if (not continueExport):
                    Logutil.log('Game export canceled by user',
                                util.LOG_LEVEL_INFO)
                    break

                gameCount = gameCount + 1

                gamenameFromFile = romCollection.getGamenameFromFilename(
                    game.firstRom)
                artworkfiles = {}
                artworkurls = []

                genreList = []
                if game.genre:
                    for genre in game.genre.split(', '):
                        if genre != 'None':
                            genreList.append(genre)

                self.createNfoFromDesc(
                    game.name, game.plot, romCollection.name, game.publisher,
                    game.developer, game.year, game.maxplayers, game.rating,
                    game.votes, game.url, game.region, game.media,
                    game.perspective, game.controllerType, game.originalTitle,
                    game.alternateTitle, game.version, genreList,
                    game.isFavorite, game.playcount, game.firstRom,
                    gamenameFromFile, artworkfiles, artworkurls)

        progressDialog.writeMsg("", "", "", -1)
        del progressDialog

    def createNfoFromDesc(self, title, plot, platform, publisher, developer,
                          year, maxPlayer, rating, votes, detailUrl, region,
                          media, perspective, controller, originalTitle,
                          alternateTitle, version, genreList, isFavorite,
                          launchCount, romFile, gameNameFromFile, artworkfiles,
                          artworkurls):

        Logutil.log("Begin createNfoFromDesc", util.LOG_LEVEL_INFO)

        nfoFile = self.getNfoFilePath(platform, romFile, gameNameFromFile)
        if nfoFile == '':
            log.debug(u"Not writing NFO file for {0}".format(gameNameFromFile))
            return

        root = ET.Element('game')
        #reference to eventually existing nfo
        existing_nfo = None

        #Read info from existing nfo file. New info and existing info will be merged
        if xbmcvfs.exists(nfoFile):
            existing_nfo = ET.ElementTree()
            if sys.version_info >= (2, 7):
                parser = ET.XMLParser(encoding='utf-8')
            else:
                parser = ET.XMLParser()

            existing_nfo.parse(nfoFile, parser)

        for elem in [
                'title', 'originalTitle', 'alternateTitle', 'platform', 'plot',
                'publisher', 'developer', 'year', 'detailUrl', 'maxPlayer',
                'region', 'media', 'perspective', 'controller', 'version',
                'rating', 'votes', 'isFavorite', 'launchCount'
        ]:
            elemText = locals()[elem]
            #if new info is empty, check if the existing file has it
            if existing_nfo and not elemText:
                try:
                    elemText = existing_nfo.find(elem).text
                except:
                    pass
            ET.SubElement(root, elem).text = elemText

        #if no genre was given, use genres from existing file
        if existing_nfo and len(genreList) == 0:
            for genre in existing_nfo.findall("genre"):
                genreList.append(genre.text)

        for genre in genreList:
            ET.SubElement(root, 'genre').text = genre

        for artworktype in artworkfiles.keys():

            local = ''
            online = ''
            try:
                local = artworkfiles[artworktype][0]
                online = artworkurls[artworktype.name]
            except:
                pass

            try:
                SubElement(root, 'thumb', {
                    'type': artworktype.name,
                    'local': local
                }).text = online
            except Exception, (exc):
                Logutil.log('Error writing artwork url: ' + str(exc),
                            util.LOG_LEVEL_WARNING)
                pass

        self.writeNfoElementToFile(root, platform, romFile, gameNameFromFile,
                                   nfoFile)