﻿# encoding: utf-8
# api: powershell
# title: Show Weather Notificatio
# description: Show weather information in the lower right corner of the desktop.
# version: 273.15
# type: function
# author: Mosser Lee
# license: CC0
# function: ConvertTo-Icon
# x-poshcode-id: 4634
# x-archived: 2013-11-25T06:37:43
# x-published: 2013-11-23T08:07:00
#
# Sample:
# Show-WeatherNotification -cityName Shanghai
#
<#
 # author: Mosser Lee
 # env: powershell 3.0 +
 # blog: http://www.pstips.net
#>


# Convert image bytes to icon format
function ConvertTo-Icon( [byte[]]$pngBuffer )
{
    $pngStream=$null
    [void]($pngStream =New-Object 'io.memorystream' $pngBuffer,$true)
    $img=[System.Drawing.Image]::FromStream($pngStream)
    $icon=[System.Drawing.Icon]::FromHandle($img.GetHicon())
    return $icon
}


# Show ballon tip notification 
function Show-NotifyIcon([System.Drawing.Icon]$icon,[string]$title,[string]$message)
{
    $balloon = New-Object System.Windows.Forms.NotifyIcon
    if($icon) 
    { 
        $balloon.Icon = $icon 
    }
    else 
    {
        $psProcPath =  Get-Process -id $pid | Select-Object -ExpandProperty Path
        $balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon( $psProcPath )
    }
    $balloon.BalloonTipIcon = 'Info'
    $balloon.BalloonTipText = $message
    $balloon.BalloonTipTitle = $title
    $balloon.Visible = $true
    $balloon.ShowBalloonTip(10000)
    sleep -Seconds 3
    $balloon.Dispose()
}


# show weather notification
function Show-WeatherNotification([string]$cityName="Shanghai")
{
    $weatherRequest =Invoke-WebRequest ( "$weatherProvider/data/2.5/weather?q={0}" -f $cityName )
    $weatherInfo = $weatherRequest | ConvertFrom-Json

    $message=""

    if($weatherInfo.cod -eq '200')
    {
        $temp_const = 273.15
         
        $city = $weatherInfo.name
        $des = $weatherInfo.weather.description
        $max_temp = [math]::Round( $weatherInfo.main.temp_max - $temp_const,1)
        $min_temp = [math]::Round( $weatherInfo.main.temp_min - $temp_const,1)
        $message="{0}: {1}`nTemperature({2}-{3})" -f $city,$des,$max_temp,$min_temp
    }

    # Weather image flag
    $iconName = $weatherInfo.weather.icon
    [byte[]]$pngBuffer = (Invoke-WebRequest -Uri "$weatherProvider/img/w/$iconName.png" ).Content
    [System.Drawing.Icon]$icon = ConvertTo-Icon -pngBuffer $pngBuffer
    Show-NotifyIcon -icon $icon -title ¡®Weather info from PStips.net¡¯ -message $message
}
Add-Type -AssemblyName 'System.Drawing'
Add-Type -AssemblyName 'System.Windows.Forms'
$weatherProvider="http://api.openweathermap.org"

#sample
Show-WeatherNotification -cityName Shanghai
