#!python
###########################################################################
# solid_demo.py - Demonstrates use of Solid.
#
###########################################################################
# Copyright (C) 2007 Simon Edwards <simon@simonzone.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) version 3 or, at the discretion of KDE e.V. (which shall
# act as a proxy as in section 14 of the GPLv3), 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.

from PyKDE4.kdecore import *
from PyKDE4.solid import *

def main():
    componentData = KComponentData("solid_demo")

    print("All devices found by Solid")
    print("--------------------------")
    for device in Solid.Device.allDevices():
        print(device.udi())
    print("")
    
    print("All audio devices found by Solid")
    print("--------------------------------")
    for device in Solid.Device.listFromType(Solid.DeviceInterface.AudioInterface, ""):
        print(device.udi())
    print("")

    print("Processor found by Solid")
    print("------------------------")
    
    # Get a Processor
    device_list = Solid.Device.listFromType(Solid.DeviceInterface.Processor, "")

    # take the first processor
    device = device_list[0]
    if device.isDeviceInterface(Solid.DeviceInterface.Processor):
        print("We've got a processor! %i to be exact..." % len(device_list))
    else:
        print("Device is not a processor.")

    processor = device.asDeviceInterface(Solid.DeviceInterface.Processor)
    print("This processors maximum speed is: " + str(processor.maxSpeed()))

    extensions = processor.instructionSets()
    print("Intel MMX supported: " + ("yes" if extensions & Solid.Processor.IntelMmx else "no"))
    print("Intel SSE supported: " + ("yes" if extensions & Solid.Processor.IntelSse else "no"))
    print("Intel SSE2 supported: " + ("yes" if extensions & Solid.Processor.IntelSse2 else "no"))
    print("Intel SSE3 supported: " + ("yes" if extensions & Solid.Processor.IntelSse3 else "no"))
    print("Intel SSE4 supported: " + ("yes" if extensions & Solid.Processor.IntelSse4 else "no"))
    print("AMD 3DNOW supported: " + ("yes" if extensions & Solid.Processor.Amd3DNow else "no"))
    print("PPC AltiVec supported: " + ("yes" if extensions & Solid.Processor.AltiVec else "no"))
    print("")
    
    print("Checking network status")
    print("-----------------------")
    
    if Solid.Networking.status() == Solid.Networking.Connected:
        print("Networking is enabled.  Feel free to go online!")
    else:
        print("Network not available.")
    print("")
    
    # get a Network Device
    netlist = Solid.Device.listFromType(Solid.DeviceInterface.NetworkInterface, "")
    
    # check to see if no network devices were found
    if len(netlist)==0:
        print("No network devices found!")
    else:
        print("Found %s network device(s)" % len(netlist))
        for device in netlist:
            netdev = device.asDeviceInterface(Solid.DeviceInterface.NetworkInterface)
            
            # keep the program from crashing in the event that there's a bug in solid
            if netdev is None:
                print("Device could not be converted.  There is a bug.")
            else:
                print("The iface of %s is %s" % (str(device.udi()),str(netdev.ifaceName())))
    
main()
