Mah!Cade:Plugins

From Wah!ki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Plugins

The plugins system for Mah!Cade was initially created to add support for reading shortcut files under windows and linux; executing them directly instead of through a 3rd party launcher. They were built into plugins to allow for ease of changes in the future.

Plugins - Launcher

Launcher plugins are tied to Mah!Cade by the lauched file extension. During the game launch process Mah!Cade looks for a plugin named launcher_<ext>.py (ext is loaded at runtime during launch). if a plugin is found Mah!Cade tries to executes the read_scexec() function; from this function Mah!Cade expects a returned set of values as per the table below.

edit  

Mah!Cade Launcher Plugin Return Values

Pos Name Description Value Type
1 Message A Return Message for log file String
2 Executable The commandline for the emulator (emulator_executable) String
3 Arguments The arguments for the emulator String
4 Working Directory No Longer used; chdir executed from base path of emulator_executable Obsolete
5 Check Executable Verify existance of executable before launch (default) Booleen
6 Launch with Shell Pass Shell=True to popen Booleen

Examples

Example Template

"""Plugin for Mah!Cade"""
def read_scexec(String):
    return  String, String, String, String, Booleen, Booleen

The example above illustrates the bare minimum requirement for a launcher plugin in Mah!Cade

Functional Example

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
###
# Application: sc_desktop
# File:        sc_desktop.py
# Description: .desktop shortcut plugin
# Copyright (c) 2005-2012   Wayne Moulden <http://www.mameau.com>
###
#
# 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# EXAMPLE FILE
#============================================================
# [Desktop Entry]
# Version=1.0
# Type=Application
# Terminal=false
# Icon[en_AU]=/usr/local/share/wahcade/pixmaps/wahcade.png
# Name[en_AU]=Wah!Cade
# Exec=/usr/bin/wahcade
# Name=Wah!Cade
# Icon=/usr/local/share/wahcade/pixmaps/wahcade-logo.png

import sys

"""Plugin for Mah!Cade"""
def read_scexec(scfile):
    """ read shortcut and return executable path """
    if sys.platform != 'win32':
        f = open(scfile)
        for line in f:
            if line[:5] == "Exec=":
                cmd = line[5:]
                return  "Executing " + cmd, cmd, "", "", False, True
        return "Ran into problems finding executable in .desktop shortcut"
    else:
        return "Only available for non-windows platforms! returning" 

Standalone Example

Here is the full standalone script.

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
###
# Application: sc_desktop
# File:        sc_desktop.py
# Description: .desktop shortcut plugin
# Copyright (c) 2005-2012   Wayne Moulden <http://www.mameau.com>
###
#
# 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# EXAMPLE FILE
#============================================================
# [Desktop Entry]
# Version=1.0
# Type=Application
# Terminal=false
# Icon[en_AU]=/usr/local/share/wahcade/pixmaps/wahcade.png
# Name[en_AU]=Wah!Cade
# Exec=/usr/bin/wahcade
# Name=Wah!Cade
# Icon=/usr/local/share/wahcade/pixmaps/wahcade-logo.png

import os, sys, subprocess
from subprocess import Popen

"""Plugin for Mah!Cade"""
def __init__(scfile=""):
    if (len(sys.argv) > 1):
        scfile = sys.argv[1]
    if (len(scfile) > 1):
        result = read_scexec(scfile) 
        if (len(result[0]) > 1): 
            run_scexec(result[0],result[1])
        else:
            return result[3]          
    else:
        return "No shortcut file passed"        

def read_scexec(scfile):
    """ read shortcut and return executable path """
    if sys.platform != 'win32':
        f = open(scfile)
        for line in f:
            if line[:5] == "Exec=":
                cmd = line[5:]
                return  "Executing " + cmd, cmd, "", "", False, True
        return "Ran into problems finding executable in .desktop shortcut"
    else:
        return "Only available for non-windows platforms! returning" 
    
def run_scexec(cmd, args, work_dir, message=""):
    if work_dir:
        os.chdir(os.path.join(os.path.abspath(sys.path[0]), work_dir))
    else:
        os.chdir(os.path.split(cmd)[0])
    if args:
        cmd = cmd + " " + args
    p = subprocess.Popen(cmd, shell=True)
    p.wait

The example above is a completely self contained launcher in its own right (written as such intentionally) to execute from a path stored in a *.desktop file under linux. It was built around the current Mah!Cade plugin implementation; you can see the function read_scexec() exists in the example above.