1*f81fb7c4SAndroid Build Coastguard Worker""" 2*f81fb7c4SAndroid Build Coastguard Worker File: 3*f81fb7c4SAndroid Build Coastguard Worker JetUtils.py 4*f81fb7c4SAndroid Build Coastguard Worker 5*f81fb7c4SAndroid Build Coastguard Worker Contents and purpose: 6*f81fb7c4SAndroid Build Coastguard Worker Utilities used throughout JetCreator 7*f81fb7c4SAndroid Build Coastguard Worker 8*f81fb7c4SAndroid Build Coastguard Worker Copyright (c) 2008 Android Open Source Project 9*f81fb7c4SAndroid Build Coastguard Worker 10*f81fb7c4SAndroid Build Coastguard Worker Licensed under the Apache License, Version 2.0 (the "License"); 11*f81fb7c4SAndroid Build Coastguard Worker you may not use this file except in compliance with the License. 12*f81fb7c4SAndroid Build Coastguard Worker You may obtain a copy of the License at 13*f81fb7c4SAndroid Build Coastguard Worker 14*f81fb7c4SAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 15*f81fb7c4SAndroid Build Coastguard Worker 16*f81fb7c4SAndroid Build Coastguard Worker Unless required by applicable law or agreed to in writing, software 17*f81fb7c4SAndroid Build Coastguard Worker distributed under the License is distributed on an "AS IS" BASIS, 18*f81fb7c4SAndroid Build Coastguard Worker WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19*f81fb7c4SAndroid Build Coastguard Worker See the License for the specific language governing permissions and 20*f81fb7c4SAndroid Build Coastguard Worker limitations under the License. 21*f81fb7c4SAndroid Build Coastguard Worker""" 22*f81fb7c4SAndroid Build Coastguard Worker 23*f81fb7c4SAndroid Build Coastguard Workerfrom __future__ import with_statement 24*f81fb7c4SAndroid Build Coastguard Worker 25*f81fb7c4SAndroid Build Coastguard Workerimport wx 26*f81fb7c4SAndroid Build Coastguard Workerimport os 27*f81fb7c4SAndroid Build Coastguard Workerimport copy 28*f81fb7c4SAndroid Build Coastguard Workerimport ConfigParser 29*f81fb7c4SAndroid Build Coastguard Workerimport logging 30*f81fb7c4SAndroid Build Coastguard Workerimport time 31*f81fb7c4SAndroid Build Coastguard Workerimport tempfile 32*f81fb7c4SAndroid Build Coastguard Worker 33*f81fb7c4SAndroid Build Coastguard Workerfrom JetDefs import * 34*f81fb7c4SAndroid Build Coastguard Workerfrom JetDebug import * 35*f81fb7c4SAndroid Build Coastguard Workerfrom midifile import TimeBase, trackGrid 36*f81fb7c4SAndroid Build Coastguard Worker 37*f81fb7c4SAndroid Build Coastguard Workerclass JetCutCopy(object): 38*f81fb7c4SAndroid Build Coastguard Worker """ Handles cut/copy/pasting of events and segments """ 39*f81fb7c4SAndroid Build Coastguard Worker def __init__ (self, objType, objSave, currentSegmentName): 40*f81fb7c4SAndroid Build Coastguard Worker self.objType = objType 41*f81fb7c4SAndroid Build Coastguard Worker self.objSave = copy.deepcopy(objSave) 42*f81fb7c4SAndroid Build Coastguard Worker self.currentSegmentName = currentSegmentName 43*f81fb7c4SAndroid Build Coastguard Worker 44*f81fb7c4SAndroid Build Coastguard Worker def GetObj(self, objList): 45*f81fb7c4SAndroid Build Coastguard Worker """ Gets an object """ 46*f81fb7c4SAndroid Build Coastguard Worker objSave = copy.deepcopy(self.objSave) 47*f81fb7c4SAndroid Build Coastguard Worker if self.objType == JetDefs.MAIN_SEGLIST: 48*f81fb7c4SAndroid Build Coastguard Worker oldName = objSave.segname 49*f81fb7c4SAndroid Build Coastguard Worker i = len(oldName) - 1 50*f81fb7c4SAndroid Build Coastguard Worker while i > 0: 51*f81fb7c4SAndroid Build Coastguard Worker if not oldName[i].isdigit(): 52*f81fb7c4SAndroid Build Coastguard Worker break 53*f81fb7c4SAndroid Build Coastguard Worker i = i - 1 54*f81fb7c4SAndroid Build Coastguard Worker oldName = oldName[0:i+1] 55*f81fb7c4SAndroid Build Coastguard Worker i = 1 56*f81fb7c4SAndroid Build Coastguard Worker while True: 57*f81fb7c4SAndroid Build Coastguard Worker newName = oldName + str(i) 58*f81fb7c4SAndroid Build Coastguard Worker if self.UniqueSegName(newName, objList): 59*f81fb7c4SAndroid Build Coastguard Worker break 60*f81fb7c4SAndroid Build Coastguard Worker i = i + 1 61*f81fb7c4SAndroid Build Coastguard Worker objSave.segname = newName 62*f81fb7c4SAndroid Build Coastguard Worker elif self.objType == JetDefs.MAIN_EVENTLIST: 63*f81fb7c4SAndroid Build Coastguard Worker oldName = objSave.event_name 64*f81fb7c4SAndroid Build Coastguard Worker i = len(oldName) - 1 65*f81fb7c4SAndroid Build Coastguard Worker while i > 0: 66*f81fb7c4SAndroid Build Coastguard Worker if not oldName[i].isdigit(): 67*f81fb7c4SAndroid Build Coastguard Worker break 68*f81fb7c4SAndroid Build Coastguard Worker i = i - 1 69*f81fb7c4SAndroid Build Coastguard Worker oldName = oldName[0:i+1] 70*f81fb7c4SAndroid Build Coastguard Worker i = 1 71*f81fb7c4SAndroid Build Coastguard Worker while True: 72*f81fb7c4SAndroid Build Coastguard Worker newName = oldName + str(i) 73*f81fb7c4SAndroid Build Coastguard Worker if self.UniqueEventName(newName, objList): 74*f81fb7c4SAndroid Build Coastguard Worker break 75*f81fb7c4SAndroid Build Coastguard Worker i = i + 1 76*f81fb7c4SAndroid Build Coastguard Worker objSave.event_name = newName 77*f81fb7c4SAndroid Build Coastguard Worker return objSave 78*f81fb7c4SAndroid Build Coastguard Worker 79*f81fb7c4SAndroid Build Coastguard Worker def UniqueSegName(self, nameVal, seglist): 80*f81fb7c4SAndroid Build Coastguard Worker for nm in seglist: 81*f81fb7c4SAndroid Build Coastguard Worker if nm.segname == nameVal: 82*f81fb7c4SAndroid Build Coastguard Worker return False 83*f81fb7c4SAndroid Build Coastguard Worker return True 84*f81fb7c4SAndroid Build Coastguard Worker 85*f81fb7c4SAndroid Build Coastguard Worker def UniqueEventName(self, nameVal, eventlist): 86*f81fb7c4SAndroid Build Coastguard Worker for nm in eventlist: 87*f81fb7c4SAndroid Build Coastguard Worker if nm.event_name == nameVal: 88*f81fb7c4SAndroid Build Coastguard Worker return False 89*f81fb7c4SAndroid Build Coastguard Worker return True 90*f81fb7c4SAndroid Build Coastguard Worker 91*f81fb7c4SAndroid Build Coastguard Worker 92*f81fb7c4SAndroid Build Coastguard Workerclass JetState(object): 93*f81fb7c4SAndroid Build Coastguard Worker """ Saves the state for cut/copy/paste """ 94*f81fb7c4SAndroid Build Coastguard Worker def __init__ (self, jet_file, currentSegmentIndex, currentEventIndex): 95*f81fb7c4SAndroid Build Coastguard Worker self.jet_file = copy.deepcopy(jet_file) 96*f81fb7c4SAndroid Build Coastguard Worker self.currentSegmentIndex = currentSegmentIndex 97*f81fb7c4SAndroid Build Coastguard Worker self.currentEventIndex = currentEventIndex 98*f81fb7c4SAndroid Build Coastguard Worker 99*f81fb7c4SAndroid Build Coastguard Workerdef Queue (jet, queueSeg): 100*f81fb7c4SAndroid Build Coastguard Worker """ Queues a segment """ 101*f81fb7c4SAndroid Build Coastguard Worker jet.QueueSegment(queueSeg.userID, queueSeg.seg_num, queueSeg.dls_num, queueSeg.repeat, queueSeg.transpose, queueSeg.mute_flags) 102*f81fb7c4SAndroid Build Coastguard Worker 103*f81fb7c4SAndroid Build Coastguard Workerclass QueueSeg(object): 104*f81fb7c4SAndroid Build Coastguard Worker """ Object representing a segment """ 105*f81fb7c4SAndroid Build Coastguard Worker def __init__ (self, name, userID, seg_num, dls_num=-1, repeat=0, transpose=0, mute_flags=0, status=''): 106*f81fb7c4SAndroid Build Coastguard Worker self.name = name 107*f81fb7c4SAndroid Build Coastguard Worker self.userID = userID 108*f81fb7c4SAndroid Build Coastguard Worker self.seg_num = seg_num 109*f81fb7c4SAndroid Build Coastguard Worker self.dls_num = dls_num 110*f81fb7c4SAndroid Build Coastguard Worker self.repeat = repeat 111*f81fb7c4SAndroid Build Coastguard Worker self.transpose = transpose 112*f81fb7c4SAndroid Build Coastguard Worker self.mute_flags = mute_flags 113*f81fb7c4SAndroid Build Coastguard Worker self.status = status 114*f81fb7c4SAndroid Build Coastguard Worker #DumpQueueSeg(self) 115*f81fb7c4SAndroid Build Coastguard Worker 116*f81fb7c4SAndroid Build Coastguard Workerdef FindDlsNum(libraries, dlsfile): 117*f81fb7c4SAndroid Build Coastguard Worker """ Looks for a dls file in the library list """ 118*f81fb7c4SAndroid Build Coastguard Worker for index, library in enumerate(libraries): 119*f81fb7c4SAndroid Build Coastguard Worker if library == dlsfile: 120*f81fb7c4SAndroid Build Coastguard Worker return index 121*f81fb7c4SAndroid Build Coastguard Worker return -1 122*f81fb7c4SAndroid Build Coastguard Worker 123*f81fb7c4SAndroid Build Coastguard Workerdef SetRowSelection(list, row, state): 124*f81fb7c4SAndroid Build Coastguard Worker """ Sets the selection status of a list row """ 125*f81fb7c4SAndroid Build Coastguard Worker if state: 126*f81fb7c4SAndroid Build Coastguard Worker list.SetItemState(row, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) 127*f81fb7c4SAndroid Build Coastguard Worker else: 128*f81fb7c4SAndroid Build Coastguard Worker list.SetItemState(row, ~wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) 129*f81fb7c4SAndroid Build Coastguard Worker 130*f81fb7c4SAndroid Build Coastguard Workerdef ClearRowSelections(list): 131*f81fb7c4SAndroid Build Coastguard Worker """ Clears the list rows selection status """ 132*f81fb7c4SAndroid Build Coastguard Worker index = list.GetFirstSelected() 133*f81fb7c4SAndroid Build Coastguard Worker while index != -1: 134*f81fb7c4SAndroid Build Coastguard Worker SetRowSelection(list, index, False) 135*f81fb7c4SAndroid Build Coastguard Worker index = list.GetNextSelected(index) 136*f81fb7c4SAndroid Build Coastguard Worker 137*f81fb7c4SAndroid Build Coastguard Workerdef getColumnText(list, index, col): 138*f81fb7c4SAndroid Build Coastguard Worker """ Sets the text of a column """ 139*f81fb7c4SAndroid Build Coastguard Worker item = list.GetItem(index, col) 140*f81fb7c4SAndroid Build Coastguard Worker return item.GetText() 141*f81fb7c4SAndroid Build Coastguard Worker 142*f81fb7c4SAndroid Build Coastguard Workerdef getColumnValue(list, index, col): 143*f81fb7c4SAndroid Build Coastguard Worker """ Gets the text of a column """ 144*f81fb7c4SAndroid Build Coastguard Worker item = list.GetItem(index, col) 145*f81fb7c4SAndroid Build Coastguard Worker v = str(item.GetText()) 146*f81fb7c4SAndroid Build Coastguard Worker if len(v) > 0: 147*f81fb7c4SAndroid Build Coastguard Worker return int(item.GetText()) 148*f81fb7c4SAndroid Build Coastguard Worker else: 149*f81fb7c4SAndroid Build Coastguard Worker return 0 150*f81fb7c4SAndroid Build Coastguard Worker 151*f81fb7c4SAndroid Build Coastguard Workerdef StrNoneChk(fld): 152*f81fb7c4SAndroid Build Coastguard Worker """ Returns a blank string if none """ 153*f81fb7c4SAndroid Build Coastguard Worker if fld is None: 154*f81fb7c4SAndroid Build Coastguard Worker return "" 155*f81fb7c4SAndroid Build Coastguard Worker return str(fld) 156*f81fb7c4SAndroid Build Coastguard Worker 157*f81fb7c4SAndroid Build Coastguard Workerdef ConvertStrTimeToTuple(s): 158*f81fb7c4SAndroid Build Coastguard Worker """ Converts a string time to a tuple """ 159*f81fb7c4SAndroid Build Coastguard Worker try: 160*f81fb7c4SAndroid Build Coastguard Worker measures, beats, ticks = s.split(':',3) 161*f81fb7c4SAndroid Build Coastguard Worker return (int(measures), int(beats), int(ticks)) 162*f81fb7c4SAndroid Build Coastguard Worker except: 163*f81fb7c4SAndroid Build Coastguard Worker return JetDefs.MBT_DEFAULT 164*f81fb7c4SAndroid Build Coastguard Worker 165*f81fb7c4SAndroid Build Coastguard Workerdef FileRelativePath(target, base=os.curdir): 166*f81fb7c4SAndroid Build Coastguard Worker """ Returns relative file path """ 167*f81fb7c4SAndroid Build Coastguard Worker if not os.path.exists(target): 168*f81fb7c4SAndroid Build Coastguard Worker return target 169*f81fb7c4SAndroid Build Coastguard Worker 170*f81fb7c4SAndroid Build Coastguard Worker if not os.path.isdir(base): 171*f81fb7c4SAndroid Build Coastguard Worker return target 172*f81fb7c4SAndroid Build Coastguard Worker 173*f81fb7c4SAndroid Build Coastguard Worker base_list = (os.path.abspath(base)).split(os.sep) 174*f81fb7c4SAndroid Build Coastguard Worker target_list = (os.path.abspath(target)).split(os.sep) 175*f81fb7c4SAndroid Build Coastguard Worker if os.name in ['nt','dos','os2'] and base_list[0] <> target_list[0]: 176*f81fb7c4SAndroid Build Coastguard Worker return target 177*f81fb7c4SAndroid Build Coastguard Worker for i in range(min(len(base_list), len(target_list))): 178*f81fb7c4SAndroid Build Coastguard Worker if base_list[i] <> target_list[i]: break 179*f81fb7c4SAndroid Build Coastguard Worker else: 180*f81fb7c4SAndroid Build Coastguard Worker i+=1 181*f81fb7c4SAndroid Build Coastguard Worker rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:] 182*f81fb7c4SAndroid Build Coastguard Worker return os.path.join(*rel_list) 183*f81fb7c4SAndroid Build Coastguard Worker 184*f81fb7c4SAndroid Build Coastguard Workerdef FileFixPath(fileSpec): 185*f81fb7c4SAndroid Build Coastguard Worker """ Tweaks slashes """ 186*f81fb7c4SAndroid Build Coastguard Worker return fileSpec.replace("\\", "/") 187*f81fb7c4SAndroid Build Coastguard Worker 188*f81fb7c4SAndroid Build Coastguard Workerdef FileKillClean(fileName): 189*f81fb7c4SAndroid Build Coastguard Worker """ Deletes a file skipping errors """ 190*f81fb7c4SAndroid Build Coastguard Worker try: 191*f81fb7c4SAndroid Build Coastguard Worker os.remove(fileName) 192*f81fb7c4SAndroid Build Coastguard Worker except: 193*f81fb7c4SAndroid Build Coastguard Worker pass 194*f81fb7c4SAndroid Build Coastguard Worker 195*f81fb7c4SAndroid Build Coastguard Workerdef FileJustRoot(fileName): 196*f81fb7c4SAndroid Build Coastguard Worker """ Gets just the root of the file name """ 197*f81fb7c4SAndroid Build Coastguard Worker try: 198*f81fb7c4SAndroid Build Coastguard Worker return os.path.splitext(fileName)[0] 199*f81fb7c4SAndroid Build Coastguard Worker except: 200*f81fb7c4SAndroid Build Coastguard Worker return "" 201*f81fb7c4SAndroid Build Coastguard Worker 202*f81fb7c4SAndroid Build Coastguard Workerdef FileJustName(fileName): 203*f81fb7c4SAndroid Build Coastguard Worker """ Gets just the filename, without the path """ 204*f81fb7c4SAndroid Build Coastguard Worker try: 205*f81fb7c4SAndroid Build Coastguard Worker return os.path.split(fileName)[1] 206*f81fb7c4SAndroid Build Coastguard Worker except: 207*f81fb7c4SAndroid Build Coastguard Worker return "" 208*f81fb7c4SAndroid Build Coastguard Worker 209*f81fb7c4SAndroid Build Coastguard Workerdef FileJustPath(fileName): 210*f81fb7c4SAndroid Build Coastguard Worker """ Gets just the path, without the file name """ 211*f81fb7c4SAndroid Build Coastguard Worker try: 212*f81fb7c4SAndroid Build Coastguard Worker return os.path.split(fileName)[0] 213*f81fb7c4SAndroid Build Coastguard Worker except: 214*f81fb7c4SAndroid Build Coastguard Worker return "" 215*f81fb7c4SAndroid Build Coastguard Worker 216*f81fb7c4SAndroid Build Coastguard Workerdef FileJustExt(fileName): 217*f81fb7c4SAndroid Build Coastguard Worker """ Gets just the extension of the file """ 218*f81fb7c4SAndroid Build Coastguard Worker try: 219*f81fb7c4SAndroid Build Coastguard Worker ext = os.path.splitext(fileName)[1] 220*f81fb7c4SAndroid Build Coastguard Worker return ext.upper() 221*f81fb7c4SAndroid Build Coastguard Worker except: 222*f81fb7c4SAndroid Build Coastguard Worker return "" 223*f81fb7c4SAndroid Build Coastguard Worker 224*f81fb7c4SAndroid Build Coastguard Workerdef FileDateTime(fileName): 225*f81fb7c4SAndroid Build Coastguard Worker """ Gets the date/time of a file """ 226*f81fb7c4SAndroid Build Coastguard Worker try: 227*f81fb7c4SAndroid Build Coastguard Worker filetime = time.ctime(os.path.getmtime(fileName)) 228*f81fb7c4SAndroid Build Coastguard Worker return filetime 229*f81fb7c4SAndroid Build Coastguard Worker except: 230*f81fb7c4SAndroid Build Coastguard Worker return "" 231*f81fb7c4SAndroid Build Coastguard Worker 232*f81fb7c4SAndroid Build Coastguard Workerdef FileExists(fileName): 233*f81fb7c4SAndroid Build Coastguard Worker """ Checks if a file exists """ 234*f81fb7c4SAndroid Build Coastguard Worker try: 235*f81fb7c4SAndroid Build Coastguard Worker return os.path.exists(fileName) 236*f81fb7c4SAndroid Build Coastguard Worker except: 237*f81fb7c4SAndroid Build Coastguard Worker return False 238*f81fb7c4SAndroid Build Coastguard Worker 239*f81fb7c4SAndroid Build Coastguard Workerdef IniSetValue(configFile, section, option, value): 240*f81fb7c4SAndroid Build Coastguard Worker """ Sets the value of a config file field """ 241*f81fb7c4SAndroid Build Coastguard Worker config = ConfigParser.ConfigParser() 242*f81fb7c4SAndroid Build Coastguard Worker config.read(configFile) 243*f81fb7c4SAndroid Build Coastguard Worker if not config.has_section(section): 244*f81fb7c4SAndroid Build Coastguard Worker config.add_section(section) 245*f81fb7c4SAndroid Build Coastguard Worker config.set(section, option, value) 246*f81fb7c4SAndroid Build Coastguard Worker cfgfile = open(configFile,'w') 247*f81fb7c4SAndroid Build Coastguard Worker config.write(cfgfile) 248*f81fb7c4SAndroid Build Coastguard Worker cfgfile.close() 249*f81fb7c4SAndroid Build Coastguard Worker 250*f81fb7c4SAndroid Build Coastguard Workerdef IniGetValue(configFile, section, option, retType='str', default=''): 251*f81fb7c4SAndroid Build Coastguard Worker """ Gets the value of a config file field """ 252*f81fb7c4SAndroid Build Coastguard Worker ret = default 253*f81fb7c4SAndroid Build Coastguard Worker config = ConfigParser.ConfigParser() 254*f81fb7c4SAndroid Build Coastguard Worker config.read(configFile) 255*f81fb7c4SAndroid Build Coastguard Worker if config.has_section(section): 256*f81fb7c4SAndroid Build Coastguard Worker if config.has_option(section, option): 257*f81fb7c4SAndroid Build Coastguard Worker ret = config.get(section, option) 258*f81fb7c4SAndroid Build Coastguard Worker if retType =='int': 259*f81fb7c4SAndroid Build Coastguard Worker try: 260*f81fb7c4SAndroid Build Coastguard Worker ret = int(ret) 261*f81fb7c4SAndroid Build Coastguard Worker except: 262*f81fb7c4SAndroid Build Coastguard Worker ret = 0 263*f81fb7c4SAndroid Build Coastguard Worker elif retType == 'float': 264*f81fb7c4SAndroid Build Coastguard Worker try: 265*f81fb7c4SAndroid Build Coastguard Worker ret = float(ret) 266*f81fb7c4SAndroid Build Coastguard Worker except: 267*f81fb7c4SAndroid Build Coastguard Worker ret = 0 268*f81fb7c4SAndroid Build Coastguard Worker elif retType == 'bool': 269*f81fb7c4SAndroid Build Coastguard Worker try: 270*f81fb7c4SAndroid Build Coastguard Worker if ret[0].upper()=='T': 271*f81fb7c4SAndroid Build Coastguard Worker ret = True 272*f81fb7c4SAndroid Build Coastguard Worker else: 273*f81fb7c4SAndroid Build Coastguard Worker ret = False 274*f81fb7c4SAndroid Build Coastguard Worker except: 275*f81fb7c4SAndroid Build Coastguard Worker ret = False 276*f81fb7c4SAndroid Build Coastguard Worker elif retType == 'list': 277*f81fb7c4SAndroid Build Coastguard Worker try: 278*f81fb7c4SAndroid Build Coastguard Worker ret = eval(ret) 279*f81fb7c4SAndroid Build Coastguard Worker except: 280*f81fb7c4SAndroid Build Coastguard Worker ret = [] 281*f81fb7c4SAndroid Build Coastguard Worker return ret 282*f81fb7c4SAndroid Build Coastguard Worker 283*f81fb7c4SAndroid Build Coastguard Workerdef GetRecentJetFiles(): 284*f81fb7c4SAndroid Build Coastguard Worker """ Builds a list of recent jet files """ 285*f81fb7c4SAndroid Build Coastguard Worker fileList = [] 286*f81fb7c4SAndroid Build Coastguard Worker config = ConfigParser.ConfigParser() 287*f81fb7c4SAndroid Build Coastguard Worker config.read(JetDefs.JETCREATOR_INI) 288*f81fb7c4SAndroid Build Coastguard Worker if config.has_section(JetDefs.RECENT_SECTION): 289*f81fb7c4SAndroid Build Coastguard Worker for count in range(0, 10): 290*f81fb7c4SAndroid Build Coastguard Worker sFile = "File" + str(count) 291*f81fb7c4SAndroid Build Coastguard Worker if config.has_option(JetDefs.RECENT_SECTION, sFile): 292*f81fb7c4SAndroid Build Coastguard Worker sFileName = config.get(JetDefs.RECENT_SECTION, sFile) 293*f81fb7c4SAndroid Build Coastguard Worker if FileExists(sFileName): 294*f81fb7c4SAndroid Build Coastguard Worker if sFileName != JetDefs.UNTITLED_FILE: 295*f81fb7c4SAndroid Build Coastguard Worker #fileList.append(FileRelativePath(config.get(JetDefs.RECENT_SECTION, sFile))) 296*f81fb7c4SAndroid Build Coastguard Worker fileList.append(config.get(JetDefs.RECENT_SECTION, sFile)) 297*f81fb7c4SAndroid Build Coastguard Worker return fileList 298*f81fb7c4SAndroid Build Coastguard Worker 299*f81fb7c4SAndroid Build Coastguard Workerdef AppendRecentJetFile(jetFile): 300*f81fb7c4SAndroid Build Coastguard Worker """ Appends to a list of recent jet files """ 301*f81fb7c4SAndroid Build Coastguard Worker addedFiles = [] 302*f81fb7c4SAndroid Build Coastguard Worker fileList = GetRecentJetFiles() 303*f81fb7c4SAndroid Build Coastguard Worker config = ConfigParser.ConfigParser() 304*f81fb7c4SAndroid Build Coastguard Worker config.read(JetDefs.JETCREATOR_INI) 305*f81fb7c4SAndroid Build Coastguard Worker if config.has_section(JetDefs.RECENT_SECTION): 306*f81fb7c4SAndroid Build Coastguard Worker config.remove_section(JetDefs.RECENT_SECTION) 307*f81fb7c4SAndroid Build Coastguard Worker config.add_section(JetDefs.RECENT_SECTION) 308*f81fb7c4SAndroid Build Coastguard Worker config.set(JetDefs.RECENT_SECTION, "File0", jetFile) 309*f81fb7c4SAndroid Build Coastguard Worker addedFiles.append(jetFile) 310*f81fb7c4SAndroid Build Coastguard Worker count = 1 311*f81fb7c4SAndroid Build Coastguard Worker for file in fileList: 312*f81fb7c4SAndroid Build Coastguard Worker if file not in addedFiles: 313*f81fb7c4SAndroid Build Coastguard Worker sFile = "File" + str(count) 314*f81fb7c4SAndroid Build Coastguard Worker config.set(JetDefs.RECENT_SECTION, sFile, file) 315*f81fb7c4SAndroid Build Coastguard Worker addedFiles.append(file) 316*f81fb7c4SAndroid Build Coastguard Worker count += 1 317*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(JetDefs.JETCREATOR_INI) 318*f81fb7c4SAndroid Build Coastguard Worker cfgfile = open(JetDefs.JETCREATOR_INI,'w') 319*f81fb7c4SAndroid Build Coastguard Worker config.write(cfgfile) 320*f81fb7c4SAndroid Build Coastguard Worker cfgfile.close() 321*f81fb7c4SAndroid Build Coastguard Worker 322*f81fb7c4SAndroid Build Coastguard Workerdef CompareMbt(mbt1, mbt2): 323*f81fb7c4SAndroid Build Coastguard Worker """ Compates to measure/beat/tick values """ 324*f81fb7c4SAndroid Build Coastguard Worker try: 325*f81fb7c4SAndroid Build Coastguard Worker m1, b1, t1 = mbt1.split(':',3) 326*f81fb7c4SAndroid Build Coastguard Worker m2, b2, t2 = mbt2.split(':',3) 327*f81fb7c4SAndroid Build Coastguard Worker if int(m1) > int(m2): 328*f81fb7c4SAndroid Build Coastguard Worker return False 329*f81fb7c4SAndroid Build Coastguard Worker elif int(m1) == int(m2) and int(b1) > int(b2): 330*f81fb7c4SAndroid Build Coastguard Worker return False 331*f81fb7c4SAndroid Build Coastguard Worker elif int(b1) == int(b2) and int(t1) > int(t2): 332*f81fb7c4SAndroid Build Coastguard Worker return False 333*f81fb7c4SAndroid Build Coastguard Worker elif int(m1) == int(m2) and int(b1) == int(b2) and int(t1) == int(t2): 334*f81fb7c4SAndroid Build Coastguard Worker return False 335*f81fb7c4SAndroid Build Coastguard Worker else: 336*f81fb7c4SAndroid Build Coastguard Worker return True 337*f81fb7c4SAndroid Build Coastguard Worker except: 338*f81fb7c4SAndroid Build Coastguard Worker return False 339*f81fb7c4SAndroid Build Coastguard Worker 340*f81fb7c4SAndroid Build Coastguard Workerdef MbtVal(mbt): 341*f81fb7c4SAndroid Build Coastguard Worker """ Converts mbts to ticks """ 342*f81fb7c4SAndroid Build Coastguard Worker if type(mbt).__name__=='str' or type(mbt).__name__=='unicode': 343*f81fb7c4SAndroid Build Coastguard Worker mbt1 = mbt 344*f81fb7c4SAndroid Build Coastguard Worker else: 345*f81fb7c4SAndroid Build Coastguard Worker mbt1 = "%d:%d:%d" % mbt 346*f81fb7c4SAndroid Build Coastguard Worker try: 347*f81fb7c4SAndroid Build Coastguard Worker return TimeBase().ConvertStrTimeToTicks(mbt1) 348*f81fb7c4SAndroid Build Coastguard Worker except: 349*f81fb7c4SAndroid Build Coastguard Worker return 0 350*f81fb7c4SAndroid Build Coastguard Worker 351*f81fb7c4SAndroid Build Coastguard Workerdef TicksToMbt(ticks): 352*f81fb7c4SAndroid Build Coastguard Worker """ Converts ticks to mbts """ 353*f81fb7c4SAndroid Build Coastguard Worker return TimeBase().ConvertTicksToMBT(ticks) 354*f81fb7c4SAndroid Build Coastguard Worker 355*f81fb7c4SAndroid Build Coastguard Workerdef TicksToStrMbt(ticks): 356*f81fb7c4SAndroid Build Coastguard Worker """ Converts ticks to mbts """ 357*f81fb7c4SAndroid Build Coastguard Worker return TimeBase().ConvertTicksToStr(ticks, '%02d:%02d:%02d') 358*f81fb7c4SAndroid Build Coastguard Worker 359*f81fb7c4SAndroid Build Coastguard Workerdef MbtDifference(mbt1, mbt2): 360*f81fb7c4SAndroid Build Coastguard Worker """ Returns difference between mbt values """ 361*f81fb7c4SAndroid Build Coastguard Worker return TimeBase().MbtDifference(mbt1, mbt2) 362*f81fb7c4SAndroid Build Coastguard Worker 363*f81fb7c4SAndroid Build Coastguard Workerdef PlayMidiFile(midiFile, dlsFile=''): 364*f81fb7c4SAndroid Build Coastguard Worker """ Plays a midi file """ 365*f81fb7c4SAndroid Build Coastguard Worker try: 366*f81fb7c4SAndroid Build Coastguard Worker e = __import__('eas') 367*f81fb7c4SAndroid Build Coastguard Worker 368*f81fb7c4SAndroid Build Coastguard Worker if midiFile == '': 369*f81fb7c4SAndroid Build Coastguard Worker return 370*f81fb7c4SAndroid Build Coastguard Worker eas = e.EAS() 371*f81fb7c4SAndroid Build Coastguard Worker if dlsFile > '': 372*f81fb7c4SAndroid Build Coastguard Worker eas.LoadDLSCollection(dlsFile) 373*f81fb7c4SAndroid Build Coastguard Worker eas.StartWave() 374*f81fb7c4SAndroid Build Coastguard Worker audio_file = eas.OpenFile(midiFile) 375*f81fb7c4SAndroid Build Coastguard Worker audio_file.Prepare() 376*f81fb7c4SAndroid Build Coastguard Worker audio_file.Play() 377*f81fb7c4SAndroid Build Coastguard Worker audio_file.Close() 378*f81fb7c4SAndroid Build Coastguard Worker eas.StopWave() 379*f81fb7c4SAndroid Build Coastguard Worker eas.Shutdown() 380*f81fb7c4SAndroid Build Coastguard Worker except: 381*f81fb7c4SAndroid Build Coastguard Worker return 382*f81fb7c4SAndroid Build Coastguard Worker 383*f81fb7c4SAndroid Build Coastguard Workerdef SegmentOutputFile(segName, configFile): 384*f81fb7c4SAndroid Build Coastguard Worker """ Computes a segment output file """ 385*f81fb7c4SAndroid Build Coastguard Worker configPath = FileJustPath(configFile) + "/" 386*f81fb7c4SAndroid Build Coastguard Worker segOutput = configPath + "Seg_" + segName + ".mid" 387*f81fb7c4SAndroid Build Coastguard Worker return segOutput 388*f81fb7c4SAndroid Build Coastguard Worker 389*f81fb7c4SAndroid Build Coastguard Workerdef ComputeMuteFlags(jet_file, segName): 390*f81fb7c4SAndroid Build Coastguard Worker """ Computes mute flags """ 391*f81fb7c4SAndroid Build Coastguard Worker muteFlag = 0 392*f81fb7c4SAndroid Build Coastguard Worker for jet_event in jet_file.GetEvents(segName): 393*f81fb7c4SAndroid Build Coastguard Worker muteFlag = SetMute(jet_event.track_num, muteFlag) 394*f81fb7c4SAndroid Build Coastguard Worker return muteFlag 395*f81fb7c4SAndroid Build Coastguard Worker 396*f81fb7c4SAndroid Build Coastguard Workerdef ComputeMuteFlagsFromList1(list): 397*f81fb7c4SAndroid Build Coastguard Worker """ Computes mute flags from a list """ 398*f81fb7c4SAndroid Build Coastguard Worker muteFlag = 0 399*f81fb7c4SAndroid Build Coastguard Worker num = list.GetItemCount() 400*f81fb7c4SAndroid Build Coastguard Worker for iRow in range(num): 401*f81fb7c4SAndroid Build Coastguard Worker track_num = list.GetTrackNumber(iRow) 402*f81fb7c4SAndroid Build Coastguard Worker if list.IsChecked(iRow): 403*f81fb7c4SAndroid Build Coastguard Worker muteFlag = SetMute(track_num, muteFlag) 404*f81fb7c4SAndroid Build Coastguard Worker else: 405*f81fb7c4SAndroid Build Coastguard Worker muteFlag = ClearMute(track_num, muteFlag) 406*f81fb7c4SAndroid Build Coastguard Worker return muteFlag 407*f81fb7c4SAndroid Build Coastguard Worker 408*f81fb7c4SAndroid Build Coastguard Workerdef ComputeMuteFlagsFromList(list): 409*f81fb7c4SAndroid Build Coastguard Worker """ Computes mute flags from a list """ 410*f81fb7c4SAndroid Build Coastguard Worker muteFlags = 0 411*f81fb7c4SAndroid Build Coastguard Worker num = list.GetItemCount() 412*f81fb7c4SAndroid Build Coastguard Worker for iRow in range(num): 413*f81fb7c4SAndroid Build Coastguard Worker track_num = list.GetTrackNumber(iRow) 414*f81fb7c4SAndroid Build Coastguard Worker if list.IsChecked(iRow): 415*f81fb7c4SAndroid Build Coastguard Worker muteFlags = SetMute(track_num, muteFlags) 416*f81fb7c4SAndroid Build Coastguard Worker return muteFlags 417*f81fb7c4SAndroid Build Coastguard Worker 418*f81fb7c4SAndroid Build Coastguard Worker 419*f81fb7c4SAndroid Build Coastguard Workerdef SetMuteFlag(track, muteFlag, mute): 420*f81fb7c4SAndroid Build Coastguard Worker """ Sets a mute flag """ 421*f81fb7c4SAndroid Build Coastguard Worker if mute: 422*f81fb7c4SAndroid Build Coastguard Worker SetMute(track, muteFlag) 423*f81fb7c4SAndroid Build Coastguard Worker else: 424*f81fb7c4SAndroid Build Coastguard Worker ClearMute(track, muteFlag) 425*f81fb7c4SAndroid Build Coastguard Worker 426*f81fb7c4SAndroid Build Coastguard Workerdef SetMute(track, muteFlag): 427*f81fb7c4SAndroid Build Coastguard Worker """ Sets a mute flag """ 428*f81fb7c4SAndroid Build Coastguard Worker try: 429*f81fb7c4SAndroid Build Coastguard Worker muteFlag |= 1 << (track) 430*f81fb7c4SAndroid Build Coastguard Worker return muteFlag 431*f81fb7c4SAndroid Build Coastguard Worker except: 432*f81fb7c4SAndroid Build Coastguard Worker #bad argument 433*f81fb7c4SAndroid Build Coastguard Worker return muteFlag 434*f81fb7c4SAndroid Build Coastguard Worker 435*f81fb7c4SAndroid Build Coastguard Workerdef ClearMute(track, muteFlag): 436*f81fb7c4SAndroid Build Coastguard Worker """ Clears a mute flag """ 437*f81fb7c4SAndroid Build Coastguard Worker try: 438*f81fb7c4SAndroid Build Coastguard Worker muteFlag &= ~(1 << (track)) 439*f81fb7c4SAndroid Build Coastguard Worker return muteFlag; 440*f81fb7c4SAndroid Build Coastguard Worker except: 441*f81fb7c4SAndroid Build Coastguard Worker #bad argument 442*f81fb7c4SAndroid Build Coastguard Worker return muteFlag 443*f81fb7c4SAndroid Build Coastguard Worker 444*f81fb7c4SAndroid Build Coastguard Workerdef GetMute(track, muteFlag): 445*f81fb7c4SAndroid Build Coastguard Worker """ Get a mute flag """ 446*f81fb7c4SAndroid Build Coastguard Worker try: 447*f81fb7c4SAndroid Build Coastguard Worker if (muteFlag & ( 1 << (track))) == 0: 448*f81fb7c4SAndroid Build Coastguard Worker return False 449*f81fb7c4SAndroid Build Coastguard Worker else: 450*f81fb7c4SAndroid Build Coastguard Worker return True 451*f81fb7c4SAndroid Build Coastguard Worker except: 452*f81fb7c4SAndroid Build Coastguard Worker #bad argument 453*f81fb7c4SAndroid Build Coastguard Worker return False 454*f81fb7c4SAndroid Build Coastguard Worker 455*f81fb7c4SAndroid Build Coastguard Workerdef InfoMsg(msgTitle, msgText): 456*f81fb7c4SAndroid Build Coastguard Worker """ Display a simple informational message """ 457*f81fb7c4SAndroid Build Coastguard Worker dlg = wx.MessageDialog(None, 458*f81fb7c4SAndroid Build Coastguard Worker message=msgText, 459*f81fb7c4SAndroid Build Coastguard Worker caption=msgTitle, 460*f81fb7c4SAndroid Build Coastguard Worker style=wx.OK|wx.ICON_INFORMATION 461*f81fb7c4SAndroid Build Coastguard Worker ) 462*f81fb7c4SAndroid Build Coastguard Worker dlg.ShowModal() 463*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 464*f81fb7c4SAndroid Build Coastguard Worker 465*f81fb7c4SAndroid Build Coastguard Workerdef SendEvent (mycontrol, evt): 466*f81fb7c4SAndroid Build Coastguard Worker """ Sends an event """ 467*f81fb7c4SAndroid Build Coastguard Worker cmd = wx.CommandEvent(evt) 468*f81fb7c4SAndroid Build Coastguard Worker cmd.SetEventObject(mycontrol) 469*f81fb7c4SAndroid Build Coastguard Worker cmd.SetId(mycontrol.GetId()) 470*f81fb7c4SAndroid Build Coastguard Worker mycontrol.GetEventHandler().ProcessEvent(cmd) 471*f81fb7c4SAndroid Build Coastguard Worker 472*f81fb7c4SAndroid Build Coastguard Workerdef GetJetHelpText(dlgName, fld): 473*f81fb7c4SAndroid Build Coastguard Worker """ Gets the jet help text file """ 474*f81fb7c4SAndroid Build Coastguard Worker return IniGetValue(JetDefs.JETCREATOR_HLP, dlgName, fld) 475*f81fb7c4SAndroid Build Coastguard Worker 476*f81fb7c4SAndroid Build Coastguard Workerdef ExportJetArchive(fileName, jetConfigFile, jetFile): 477*f81fb7c4SAndroid Build Coastguard Worker """ Exports all files into a zip archive file """ 478*f81fb7c4SAndroid Build Coastguard Worker z = __import__('zipfile') 479*f81fb7c4SAndroid Build Coastguard Worker zip = z.ZipFile(fileName, 'w') 480*f81fb7c4SAndroid Build Coastguard Worker 481*f81fb7c4SAndroid Build Coastguard Worker #zip the original .JET file 482*f81fb7c4SAndroid Build Coastguard Worker if FileExists(jetFile.config.filename): 483*f81fb7c4SAndroid Build Coastguard Worker zip.write(jetFile.config.filename, FileJustName(jetFile.config.filename)) 484*f81fb7c4SAndroid Build Coastguard Worker 485*f81fb7c4SAndroid Build Coastguard Worker #make copy of object so we can modify it 486*f81fb7c4SAndroid Build Coastguard Worker jet_file = copy.deepcopy(jetFile) 487*f81fb7c4SAndroid Build Coastguard Worker 488*f81fb7c4SAndroid Build Coastguard Worker #zip the files, without paths 489*f81fb7c4SAndroid Build Coastguard Worker for segment in jet_file.GetSegments(): 490*f81fb7c4SAndroid Build Coastguard Worker if FileExists(segment.filename): 491*f81fb7c4SAndroid Build Coastguard Worker if not FileJustName(segment.filename) in zip.namelist(): 492*f81fb7c4SAndroid Build Coastguard Worker zip.write(segment.filename, FileJustName(segment.filename)) 493*f81fb7c4SAndroid Build Coastguard Worker if FileExists(segment.output): 494*f81fb7c4SAndroid Build Coastguard Worker if not FileJustName(segment.output) in zip.namelist(): 495*f81fb7c4SAndroid Build Coastguard Worker zip.write(segment.output, FileJustName(segment.output)) 496*f81fb7c4SAndroid Build Coastguard Worker 497*f81fb7c4SAndroid Build Coastguard Worker #zip the library files 498*f81fb7c4SAndroid Build Coastguard Worker for library in jet_file.GetLibraries(): 499*f81fb7c4SAndroid Build Coastguard Worker if FileExists(library): 500*f81fb7c4SAndroid Build Coastguard Worker if not FileJustName(library) in zip.namelist(): 501*f81fb7c4SAndroid Build Coastguard Worker zip.write(library, FileJustName(library)) 502*f81fb7c4SAndroid Build Coastguard Worker 503*f81fb7c4SAndroid Build Coastguard Worker #remove the paths on filenames 504*f81fb7c4SAndroid Build Coastguard Worker for segment in jet_file.GetSegments(): 505*f81fb7c4SAndroid Build Coastguard Worker segment.filename = FileJustName(segment.filename) 506*f81fb7c4SAndroid Build Coastguard Worker segment.dlsfile = FileJustName(segment.dlsfile) 507*f81fb7c4SAndroid Build Coastguard Worker segment.output = FileJustName(segment.output) 508*f81fb7c4SAndroid Build Coastguard Worker 509*f81fb7c4SAndroid Build Coastguard Worker #remove paths 510*f81fb7c4SAndroid Build Coastguard Worker for index, library in enumerate(jet_file.libraries): 511*f81fb7c4SAndroid Build Coastguard Worker jet_file.libraries[index] = FileJustName(library) 512*f81fb7c4SAndroid Build Coastguard Worker 513*f81fb7c4SAndroid Build Coastguard Worker #create temporary .JTC file so we can modify paths to files 514*f81fb7c4SAndroid Build Coastguard Worker tmpConfigFile = JetDefs.TEMP_JET_CONFIG_FILE 515*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(tmpConfigFile) 516*f81fb7c4SAndroid Build Coastguard Worker 517*f81fb7c4SAndroid Build Coastguard Worker #save the file 518*f81fb7c4SAndroid Build Coastguard Worker jet_file.SaveJetConfig(tmpConfigFile) 519*f81fb7c4SAndroid Build Coastguard Worker 520*f81fb7c4SAndroid Build Coastguard Worker #zip it and rename it back to original name without path 521*f81fb7c4SAndroid Build Coastguard Worker zip.write(tmpConfigFile, FileJustName(jetConfigFile)) 522*f81fb7c4SAndroid Build Coastguard Worker 523*f81fb7c4SAndroid Build Coastguard Worker #create a flag file so we know this is a jet archive 524*f81fb7c4SAndroid Build Coastguard Worker zip.write(tmpConfigFile, "JetArchive") 525*f81fb7c4SAndroid Build Coastguard Worker 526*f81fb7c4SAndroid Build Coastguard Worker zip.close() 527*f81fb7c4SAndroid Build Coastguard Worker 528*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(tmpConfigFile) 529*f81fb7c4SAndroid Build Coastguard Worker 530*f81fb7c4SAndroid Build Coastguard Workerdef ValidateConfig(test_jet_file): 531*f81fb7c4SAndroid Build Coastguard Worker """ Validates the contents of a config file """ 532*f81fb7c4SAndroid Build Coastguard Worker dImp = __import__('JetDialogs') 533*f81fb7c4SAndroid Build Coastguard Worker errors = [] 534*f81fb7c4SAndroid Build Coastguard Worker fatalError = False 535*f81fb7c4SAndroid Build Coastguard Worker for segment in test_jet_file.segments: 536*f81fb7c4SAndroid Build Coastguard Worker logging.debug(segment.filename) 537*f81fb7c4SAndroid Build Coastguard Worker if segment.filename is not None and len(segment.filename) > 0 and not FileExists(segment.filename): 538*f81fb7c4SAndroid Build Coastguard Worker errors.append(("Segment MIDI file not found", segment.filename)) 539*f81fb7c4SAndroid Build Coastguard Worker fatalError = True 540*f81fb7c4SAndroid Build Coastguard Worker if segment.dlsfile is not None and len(segment.dlsfile) > 0 and not FileExists(segment.dlsfile): 541*f81fb7c4SAndroid Build Coastguard Worker errors.append(("Segment DLS file not found; removing from config", segment.dlsfile)) 542*f81fb7c4SAndroid Build Coastguard Worker segment.dlsfile = "" 543*f81fb7c4SAndroid Build Coastguard Worker 544*f81fb7c4SAndroid Build Coastguard Worker logging.debug(test_jet_file.config.filename) 545*f81fb7c4SAndroid Build Coastguard Worker 546*f81fb7c4SAndroid Build Coastguard Worker if len(errors) == 0: 547*f81fb7c4SAndroid Build Coastguard Worker return True 548*f81fb7c4SAndroid Build Coastguard Worker else: 549*f81fb7c4SAndroid Build Coastguard Worker dlg = dImp.JetErrors("Jet Definition File Errors") 550*f81fb7c4SAndroid Build Coastguard Worker dlg.SetErrors(errors) 551*f81fb7c4SAndroid Build Coastguard Worker result = dlg.ShowModal() 552*f81fb7c4SAndroid Build Coastguard Worker dlg.Destroy() 553*f81fb7c4SAndroid Build Coastguard Worker if fatalError: 554*f81fb7c4SAndroid Build Coastguard Worker return False 555*f81fb7c4SAndroid Build Coastguard Worker else: 556*f81fb7c4SAndroid Build Coastguard Worker return True 557*f81fb7c4SAndroid Build Coastguard Worker 558*f81fb7c4SAndroid Build Coastguard Workerdef release_getLogger(name): 559*f81fb7c4SAndroid Build Coastguard Worker """ passing original handler with debug() method replaced to empty function """ 560*f81fb7c4SAndroid Build Coastguard Worker 561*f81fb7c4SAndroid Build Coastguard Worker def dummy(*k, **kw): 562*f81fb7c4SAndroid Build Coastguard Worker pass 563*f81fb7c4SAndroid Build Coastguard Worker 564*f81fb7c4SAndroid Build Coastguard Worker global __orig_getLogger 565*f81fb7c4SAndroid Build Coastguard Worker log = __orig_getLogger(name) 566*f81fb7c4SAndroid Build Coastguard Worker setattr(log, 'debug', dummy) 567*f81fb7c4SAndroid Build Coastguard Worker setattr(log, 'info', dummy) 568*f81fb7c4SAndroid Build Coastguard Worker setattr(log, 'error', dummy) 569*f81fb7c4SAndroid Build Coastguard Worker setattr(log, 'critical', dummy) 570*f81fb7c4SAndroid Build Coastguard Worker return log 571*f81fb7c4SAndroid Build Coastguard Worker 572*f81fb7c4SAndroid Build Coastguard Workerdef install_release_loggers(): 573*f81fb7c4SAndroid Build Coastguard Worker """ Save original handler, installs newer one """ 574*f81fb7c4SAndroid Build Coastguard Worker global __orig_getLogger 575*f81fb7c4SAndroid Build Coastguard Worker __orig_getLogger = logging.getLogger 576*f81fb7c4SAndroid Build Coastguard Worker setattr(logging, 'getLogger', release_getLogger) 577*f81fb7c4SAndroid Build Coastguard Worker 578*f81fb7c4SAndroid Build Coastguard Workerdef restore_getLogger(): 579*f81fb7c4SAndroid Build Coastguard Worker """ Restores original handler """ 580*f81fb7c4SAndroid Build Coastguard Worker global __orig_getLogger 581*f81fb7c4SAndroid Build Coastguard Worker if __orig_getLogger: 582*f81fb7c4SAndroid Build Coastguard Worker setattr(logging, 'getLogger', __orig_getLogger) 583*f81fb7c4SAndroid Build Coastguard Worker 584*f81fb7c4SAndroid Build Coastguard Workerdef GetMidiFileLength(midiFile): 585*f81fb7c4SAndroid Build Coastguard Worker """ Gets the length of a midi file via eas """ 586*f81fb7c4SAndroid Build Coastguard Worker e = __import__('eas') 587*f81fb7c4SAndroid Build Coastguard Worker 588*f81fb7c4SAndroid Build Coastguard Worker if not FileExists(midiFile): 589*f81fb7c4SAndroid Build Coastguard Worker return 0 590*f81fb7c4SAndroid Build Coastguard Worker 591*f81fb7c4SAndroid Build Coastguard Worker eas = e.EAS() 592*f81fb7c4SAndroid Build Coastguard Worker audio_file = eas.OpenFile(midiFile) 593*f81fb7c4SAndroid Build Coastguard Worker audio_file.Prepare() 594*f81fb7c4SAndroid Build Coastguard Worker midiLength = eas.audio_streams[0].ParseMetaData() 595*f81fb7c4SAndroid Build Coastguard Worker audio_file.Close() 596*f81fb7c4SAndroid Build Coastguard Worker eas.Shutdown() 597*f81fb7c4SAndroid Build Coastguard Worker return midiLength 598*f81fb7c4SAndroid Build Coastguard Worker 599*f81fb7c4SAndroid Build Coastguard Workerdef GetMidiInfo(midiFile): 600*f81fb7c4SAndroid Build Coastguard Worker """ Gets midi file info """ 601*f81fb7c4SAndroid Build Coastguard Worker m = __import__('midifile') 602*f81fb7c4SAndroid Build Coastguard Worker md = m.GetMidiInfo(midiFile) 603*f81fb7c4SAndroid Build Coastguard Worker return md 604*f81fb7c4SAndroid Build Coastguard Worker 605*f81fb7c4SAndroid Build Coastguard Workerdef PrintMidiInfo(midiFile): 606*f81fb7c4SAndroid Build Coastguard Worker """ Prints info about a midi file """ 607*f81fb7c4SAndroid Build Coastguard Worker mi = GetMidiInfo(midiFile) 608*f81fb7c4SAndroid Build Coastguard Worker if mi.err == 0: 609*f81fb7c4SAndroid Build Coastguard Worker print("ppqn: " + str(mi.ppqn)) 610*f81fb7c4SAndroid Build Coastguard Worker print("beats_per_measure: " + str(mi.beats_per_measure)) 611*f81fb7c4SAndroid Build Coastguard Worker print("ending mbt: " + str(mi.endMbt)) 612*f81fb7c4SAndroid Build Coastguard Worker print("ending mbt str: " + mi.endMbtStr) 613*f81fb7c4SAndroid Build Coastguard Worker print("maxMeasures: " + str(mi.maxMeasures)) 614*f81fb7c4SAndroid Build Coastguard Worker print("maxBeats: " + str(mi.maxBeats)) 615*f81fb7c4SAndroid Build Coastguard Worker print("maxTicks: " + str(mi.maxTicks)) 616*f81fb7c4SAndroid Build Coastguard Worker print("maxTracks: " + str(mi.maxTracks)) 617*f81fb7c4SAndroid Build Coastguard Worker print("totalTicks: " + str(mi.totalTicks)) 618*f81fb7c4SAndroid Build Coastguard Worker for track in mi.trackList: 619*f81fb7c4SAndroid Build Coastguard Worker print(track) 620*f81fb7c4SAndroid Build Coastguard Worker else: 621*f81fb7c4SAndroid Build Coastguard Worker print("Error opening") 622*f81fb7c4SAndroid Build Coastguard Worker 623*f81fb7c4SAndroid Build Coastguard Workerdef MidiSegInfo(segment): 624*f81fb7c4SAndroid Build Coastguard Worker """ Midi file info saved in config file for speed """ 625*f81fb7c4SAndroid Build Coastguard Worker class segInfo: 626*f81fb7c4SAndroid Build Coastguard Worker iMsPerTick = 0 627*f81fb7c4SAndroid Build Coastguard Worker bpm = 4 628*f81fb7c4SAndroid Build Coastguard Worker ppqn = 480 629*f81fb7c4SAndroid Build Coastguard Worker total_ticks = 0 630*f81fb7c4SAndroid Build Coastguard Worker iLengthInMs = 0 631*f81fb7c4SAndroid Build Coastguard Worker iTracks = 0 632*f81fb7c4SAndroid Build Coastguard Worker trackList = [] 633*f81fb7c4SAndroid Build Coastguard Worker 634*f81fb7c4SAndroid Build Coastguard Worker ver = "1.5" 635*f81fb7c4SAndroid Build Coastguard Worker ret = segInfo() 636*f81fb7c4SAndroid Build Coastguard Worker savedVer = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Ver") 637*f81fb7c4SAndroid Build Coastguard Worker savedDateTime = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "DateTime") 638*f81fb7c4SAndroid Build Coastguard Worker dateTime = FileDateTime(segment.filename) 639*f81fb7c4SAndroid Build Coastguard Worker if ver != savedVer or dateTime != savedDateTime: 640*f81fb7c4SAndroid Build Coastguard Worker mi = GetMidiInfo(segment.filename) 641*f81fb7c4SAndroid Build Coastguard Worker if mi.err == 0: 642*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Ver", ver) 643*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "DateTime", str(dateTime)) 644*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "PPQN", str(mi.ppqn)) 645*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "BPM", str(mi.beats_per_measure)) 646*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "totalTicks", str(mi.totalTicks)) 647*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "maxTracks", str(mi.maxTracks)) 648*f81fb7c4SAndroid Build Coastguard Worker iLengthInMs = GetMidiFileLength(segment.filename) * 1000 649*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "LengthInMs", str(iLengthInMs)) 650*f81fb7c4SAndroid Build Coastguard Worker if iLengthInMs > 0: 651*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "MsPerTick", str(iLengthInMs / mi.totalTicks)) 652*f81fb7c4SAndroid Build Coastguard Worker #have to write out the tracklist in format that can be saved in INI file 653*f81fb7c4SAndroid Build Coastguard Worker tl = [] 654*f81fb7c4SAndroid Build Coastguard Worker for track in mi.trackList: 655*f81fb7c4SAndroid Build Coastguard Worker tl.append((track.track, track.channel, track.name)) 656*f81fb7c4SAndroid Build Coastguard Worker IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Tracks", tl) 657*f81fb7c4SAndroid Build Coastguard Worker 658*f81fb7c4SAndroid Build Coastguard Worker trackList = [] 659*f81fb7c4SAndroid Build Coastguard Worker tl = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Tracks", 'list', []) 660*f81fb7c4SAndroid Build Coastguard Worker for t in tl: 661*f81fb7c4SAndroid Build Coastguard Worker trackList.append(trackGrid(t[0], t[1], t[2],False)) 662*f81fb7c4SAndroid Build Coastguard Worker iTracks = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "maxTracks", 'int', 0) 663*f81fb7c4SAndroid Build Coastguard Worker iMsPerTick = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "MsPerTick", 'float', 0) 664*f81fb7c4SAndroid Build Coastguard Worker bpm = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "BPM", 'int', 0) 665*f81fb7c4SAndroid Build Coastguard Worker ppqn = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "PPQN", 'int', 480) 666*f81fb7c4SAndroid Build Coastguard Worker if iMsPerTick == 0 or bpm == 0 or ppqn == 0: 667*f81fb7c4SAndroid Build Coastguard Worker return ret 668*f81fb7c4SAndroid Build Coastguard Worker tb = TimeBase(ppqn, bpm) 669*f81fb7c4SAndroid Build Coastguard Worker total_ticks = tb.ConvertStrTimeToTicks(segment.length) 670*f81fb7c4SAndroid Build Coastguard Worker if total_ticks == 0: 671*f81fb7c4SAndroid Build Coastguard Worker total_ticks = tb.MbtDifference(tb.ConvertStrTimeToTuple(segment.start), tb.ConvertStrTimeToTuple(segment.end)) 672*f81fb7c4SAndroid Build Coastguard Worker if total_ticks == 0: 673*f81fb7c4SAndroid Build Coastguard Worker return ret 674*f81fb7c4SAndroid Build Coastguard Worker 675*f81fb7c4SAndroid Build Coastguard Worker ret.iTracks = iTracks 676*f81fb7c4SAndroid Build Coastguard Worker ret.iMsPerTick = iMsPerTick 677*f81fb7c4SAndroid Build Coastguard Worker ret.bpm = bpm 678*f81fb7c4SAndroid Build Coastguard Worker ret.ppqn = ppqn 679*f81fb7c4SAndroid Build Coastguard Worker ret.total_ticks = total_ticks 680*f81fb7c4SAndroid Build Coastguard Worker ret.iLengthInMs = total_ticks * iMsPerTick 681*f81fb7c4SAndroid Build Coastguard Worker ret.trackList = trackList 682*f81fb7c4SAndroid Build Coastguard Worker return ret 683*f81fb7c4SAndroid Build Coastguard Worker 684*f81fb7c4SAndroid Build Coastguard Workerdef TimeStr(ms): 685*f81fb7c4SAndroid Build Coastguard Worker """ Returns a time string """ 686*f81fb7c4SAndroid Build Coastguard Worker s=ms/1000 687*f81fb7c4SAndroid Build Coastguard Worker m,s=divmod(s,60) 688*f81fb7c4SAndroid Build Coastguard Worker h,m=divmod(m,60) 689*f81fb7c4SAndroid Build Coastguard Worker d,h=divmod(h,24) 690*f81fb7c4SAndroid Build Coastguard Worker if m > 0: 691*f81fb7c4SAndroid Build Coastguard Worker return "%d Min %d Sec" % (m,s) 692*f81fb7c4SAndroid Build Coastguard Worker else: 693*f81fb7c4SAndroid Build Coastguard Worker return "%d Seconds" % (s) 694*f81fb7c4SAndroid Build Coastguard Worker 695*f81fb7c4SAndroid Build Coastguard Workerdef mbtFct(mbt, mod): 696*f81fb7c4SAndroid Build Coastguard Worker """ Converts times """ 697*f81fb7c4SAndroid Build Coastguard Worker if type(mbt).__name__=='str' or type(mbt).__name__=='unicode': 698*f81fb7c4SAndroid Build Coastguard Worker mbt = ConvertStrTimeToTuple(mbt) 699*f81fb7c4SAndroid Build Coastguard Worker retType = 'str' 700*f81fb7c4SAndroid Build Coastguard Worker else: 701*f81fb7c4SAndroid Build Coastguard Worker retType = 'int' 702*f81fb7c4SAndroid Build Coastguard Worker 703*f81fb7c4SAndroid Build Coastguard Worker m = mbt[0]+mod 704*f81fb7c4SAndroid Build Coastguard Worker b = mbt[1]+mod 705*f81fb7c4SAndroid Build Coastguard Worker t = mbt[2] 706*f81fb7c4SAndroid Build Coastguard Worker if m < 0: 707*f81fb7c4SAndroid Build Coastguard Worker m = 0 708*f81fb7c4SAndroid Build Coastguard Worker if b < 0: 709*f81fb7c4SAndroid Build Coastguard Worker b = 0 710*f81fb7c4SAndroid Build Coastguard Worker if b > 4: 711*f81fb7c4SAndroid Build Coastguard Worker b = 4 712*f81fb7c4SAndroid Build Coastguard Worker if t < 0: 713*f81fb7c4SAndroid Build Coastguard Worker t = 0 714*f81fb7c4SAndroid Build Coastguard Worker 715*f81fb7c4SAndroid Build Coastguard Worker if retType == 'str': 716*f81fb7c4SAndroid Build Coastguard Worker return "%d:%d:%d" % (m, b, t) 717*f81fb7c4SAndroid Build Coastguard Worker else: 718*f81fb7c4SAndroid Build Coastguard Worker return (m, b, t) 719*f81fb7c4SAndroid Build Coastguard Worker 720*f81fb7c4SAndroid Build Coastguard Workerdef OsWindows(): 721*f81fb7c4SAndroid Build Coastguard Worker """ Tells us whether windows or os x """ 722*f81fb7c4SAndroid Build Coastguard Worker if os.name == 'nt': 723*f81fb7c4SAndroid Build Coastguard Worker return True ; 724*f81fb7c4SAndroid Build Coastguard Worker else: 725*f81fb7c4SAndroid Build Coastguard Worker return False ; 726*f81fb7c4SAndroid Build Coastguard Worker 727*f81fb7c4SAndroid Build Coastguard Workerdef MacOffset(): 728*f81fb7c4SAndroid Build Coastguard Worker """ Mac screen coordinates funky on some controls so we finagle a few pixels """ 729*f81fb7c4SAndroid Build Coastguard Worker if not OsWindows(): 730*f81fb7c4SAndroid Build Coastguard Worker return 3 731*f81fb7c4SAndroid Build Coastguard Worker else: 732*f81fb7c4SAndroid Build Coastguard Worker return 0 733*f81fb7c4SAndroid Build Coastguard Worker 734*f81fb7c4SAndroid Build Coastguard Workerdef SafeJetShutdown(lock, jet): 735*f81fb7c4SAndroid Build Coastguard Worker """ Makes sure we do the jet shutdown properly """ 736*f81fb7c4SAndroid Build Coastguard Worker with lock: 737*f81fb7c4SAndroid Build Coastguard Worker #MAKE SURE WE CLEANUP 738*f81fb7c4SAndroid Build Coastguard Worker #try: jet.Clear_Queue() 739*f81fb7c4SAndroid Build Coastguard Worker #except: pass 740*f81fb7c4SAndroid Build Coastguard Worker 741*f81fb7c4SAndroid Build Coastguard Worker try: jet.eas.StopWave() 742*f81fb7c4SAndroid Build Coastguard Worker except: pass 743*f81fb7c4SAndroid Build Coastguard Worker 744*f81fb7c4SAndroid Build Coastguard Worker try: jet.Shutdown() 745*f81fb7c4SAndroid Build Coastguard Worker except: pass 746*f81fb7c4SAndroid Build Coastguard Worker 747*f81fb7c4SAndroid Build Coastguard Worker jet = None 748*f81fb7c4SAndroid Build Coastguard Worker 749*f81fb7c4SAndroid Build Coastguard Worker 750*f81fb7c4SAndroid Build Coastguard Workerdef CreateTempJetFile(org_jet_file): 751*f81fb7c4SAndroid Build Coastguard Worker """ Creates temporary jet file for playback testing """ 752*f81fb7c4SAndroid Build Coastguard Worker dirname = JetDefs.TEMP_JET_DIR 753*f81fb7c4SAndroid Build Coastguard Worker if not os.path.isdir(dirname): 754*f81fb7c4SAndroid Build Coastguard Worker os.mkdir(dirname) 755*f81fb7c4SAndroid Build Coastguard Worker 756*f81fb7c4SAndroid Build Coastguard Worker tmpConfigFile = dirname + FileJustName(org_jet_file.config_file) 757*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(tmpConfigFile) 758*f81fb7c4SAndroid Build Coastguard Worker 759*f81fb7c4SAndroid Build Coastguard Worker jet_file = copy.deepcopy(org_jet_file) 760*f81fb7c4SAndroid Build Coastguard Worker 761*f81fb7c4SAndroid Build Coastguard Worker for tmp in jet_file.segments: 762*f81fb7c4SAndroid Build Coastguard Worker tmp.output = dirname + FileJustName(tmp.output) 763*f81fb7c4SAndroid Build Coastguard Worker 764*f81fb7c4SAndroid Build Coastguard Worker jet_file.config_file = tmpConfigFile 765*f81fb7c4SAndroid Build Coastguard Worker jet_file.config.filename = dirname + FileJustName(jet_file.config.filename) 766*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(jet_file.config.filename) 767*f81fb7c4SAndroid Build Coastguard Worker 768*f81fb7c4SAndroid Build Coastguard Worker jet_file.SaveJetConfig(tmpConfigFile) 769*f81fb7c4SAndroid Build Coastguard Worker jet_file.WriteJetFileFromConfig(tmpConfigFile) 770*f81fb7c4SAndroid Build Coastguard Worker 771*f81fb7c4SAndroid Build Coastguard Worker return jet_file 772*f81fb7c4SAndroid Build Coastguard Worker 773*f81fb7c4SAndroid Build Coastguard Workerdef CleanupTempJetFile(jet_file): 774*f81fb7c4SAndroid Build Coastguard Worker """ Cleans up temporary files """ 775*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(jet_file.config.filename) 776*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(jet_file.config_file) 777*f81fb7c4SAndroid Build Coastguard Worker for tmp in jet_file.segments: 778*f81fb7c4SAndroid Build Coastguard Worker FileKillClean(tmp.output) 779*f81fb7c4SAndroid Build Coastguard Worker 780*f81fb7c4SAndroid Build Coastguard Workerdef GetNow(): 781*f81fb7c4SAndroid Build Coastguard Worker return time.asctime() 782*f81fb7c4SAndroid Build Coastguard Worker 783*f81fb7c4SAndroid Build Coastguard Worker 784*f81fb7c4SAndroid Build Coastguard Workerif __name__ == '__main__': 785*f81fb7c4SAndroid Build Coastguard Worker """ Tests functions """ 786*f81fb7c4SAndroid Build Coastguard Worker pass 787*f81fb7c4SAndroid Build Coastguard Worker 788*f81fb7c4SAndroid Build Coastguard Worker