Skip to content
Snippets Groups Projects
utils.py 4.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##### BEGIN GPL LICENSE BLOCK #####
    #
    #  This program is free software; you can redistribute it and/or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    #
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    #
    # ##### END GPL LICENSE BLOCK #####
    
    import imp
    import xmlrpc.client
    import math
    import sys
    import traceback
    
    from os.path import join
    
    import bpy
    
    from .ore_session import OreSession
    from .exceptions import LoginFailedException
    
    def _write_credentials(hash, user):
        with open(join(bpy.utils.user_resource('CONFIG', 'rffi', True), 'rffi_credentials.py'), 'w') as pwfile:
            pwfile.write('hash=\''+hash+'\'\n')
            pwfile.write('user=\''+user+'\'')
    
    
    def _read_credentials():
        bpy.rffi_creds_found = False
        bpy.rffi_user = ''
        bpy.rffi_hash = ''
    
        pwfile = bpy.utils.user_resource('CONFIG', 'rffi', True)
        try:
            pwmod = imp.find_module('rffi_credentials',[pwfile])
        except ImportError as e:
            _write_credentials('', '')
            pwmod = imp.find_module('rffi_credentials',[pwfile])
        try:
            user_creds = imp.load_module('rffi_credentials', pwmod[0], pwmod[1], pwmod[2])
            bpy.rffi_user = user_creds.user
            bpy.rffi_hash = user_creds.hash
            bpy.rffi_creds_found = True
        except ImportError as e:
            # doesn't exist yet, write template
            _write_credentials('', '')
            pwfile = bpy.utils.user_resource('CONFIG', 'rffi', True)
            pwmod = imp.find_module('rffi_credentials',[pwfile])
            try:
                user_creds = imp.load_module('rffi_credentials', pwmod[0], pwmod[1], pwmod[2])
                bpy.rffi_user = user_creds.user
                bpy.rffi_hash = user_creds.hash
                bpy.rffi_creds_found = True
            except Exception as e2:
                print("Couldn't write rffi_credentials.py", e2)
        finally:
            if pwmod and pwmod[0]: pwmod[0].close()
    
        return bpy.rffi_creds_found
    
    
    def _xmlsessions_to_oresessions(sessions, stage=None):
        output = []
        for session in sessions:
            s = session['title']
            if stage:
                s = s + ' (' + stage + ')'
            sinfo = OreSession(session['sessionId'], s) 
            if stage in {'Completed', 'Active'}:
                sinfo.frames = session['framesRendered']
            sinfo.startframe = session['startFrame']
            sinfo.endframe = session['endFrame']
            output.append(sinfo)
        return output
    
    
    def update_session_list(session_list, ore):
        while(len(session_list) > 0):
            session_list.remove(0)
        
        for s in bpy.ore_active_session_queue:
            session_list.add()
            session = session_list[-1]
            session.name = s.title + ' [' + str(s.percentageComplete()) + '% complete]'
    
    def update_complete_session_list(ore):
        all_sessions = []
        
        bpy.ore_active_session_queue = bpy.ore_cancelled_sessions
        update_session_list(ore.rejected_sessions, ore)
        bpy.ore_active_session_queue = bpy.ore_active_sessions
        update_session_list(ore.active_sessions, ore)
        bpy.ore_active_session_queue = bpy.ore_pending_sessions
        update_session_list(ore.pending_sessions, ore)
        bpy.ore_active_session_queue = bpy.ore_completed_sessions
        update_session_list(ore.completed_sessions, ore)
        
        bpy.ore_complete_session_queue = []
        bpy.ore_complete_session_queue.extend(bpy.ore_pending_sessions)
        bpy.ore_complete_session_queue.extend(bpy.ore_active_sessions)
        bpy.ore_complete_session_queue.extend(bpy.ore_completed_sessions)
        bpy.ore_complete_session_queue.extend(bpy.ore_cancelled_sessions)
        
        bpy.ore_active_session_queue = bpy.ore_complete_session_queue
        update_session_list(ore.all_sessions, ore)
    
    def check_status(ore):
        bpy.errors = []
        
        if bpy.rffi_creds_found == False and bpy.rffi_hash == '':
            bpy.errors.append('missing_creds')
        
        if '' in {ore.title, ore.longdesc, ore.shortdesc}:
            bpy.errors.append('missing_desc')
            bpy.infoError = True
    
        set_status('username', bpy.rffi_hash=='' and ore.username=='')
        set_status('password', bpy.rffi_hash=='' and ore.password=='')
        
        set_status('title', ore.title=='')
        set_status('longdesc', ore.longdesc=='')
        set_status('shortdesc', ore.shortdesc=='')
    
    
    def set_status(property, status):
        if status:
            bpy.statusMessage[property] = 'ERROR'
        else:
            bpy.statusMessage[property] = 'TRIA_RIGHT'
    
    def show_status(layoutform, property, message):
        if bpy.statusMessage[property] == 'ERROR':
            layoutform.label(text='', icon='ERROR')