| 513 | | #if 0 |
|---|
| 514 | | if( 0 == SysStringLen(name) ) |
|---|
| 515 | | return E_INVALIDARG; |
|---|
| 516 | | |
|---|
| 517 | | libvlc_instance_t *p_libvlc; |
|---|
| 518 | | HRESULT hr = _p_instance->getVLC(&p_libvlc); |
|---|
| 519 | | if( SUCCEEDED(hr) ) |
|---|
| 520 | | { |
|---|
| 521 | | int codePage = _p_instance->getCodePage(); |
|---|
| 522 | | char *psz_varname = CStrFromBSTR(codePage, name); |
|---|
| 523 | | if( NULL == psz_varname ) |
|---|
| 524 | | return E_OUTOFMEMORY; |
|---|
| 525 | | |
|---|
| 526 | | int i_type; |
|---|
| 527 | | vlc_value_t val; |
|---|
| 528 | | |
|---|
| 529 | | if( VLC_SUCCESS == VLC_VariableType(i_vlc, psz_varname, &i_type) ) |
|---|
| 530 | | { |
|---|
| 531 | | VARIANT arg; |
|---|
| 532 | | VariantInit(&arg); |
|---|
| 533 | | |
|---|
| 534 | | switch( i_type ) |
|---|
| 535 | | { |
|---|
| 536 | | case VLC_VAR_BOOL: |
|---|
| 537 | | hr = VariantChangeType(&arg, &value, 0, VT_BOOL); |
|---|
| 538 | | if( SUCCEEDED(hr) ) |
|---|
| 539 | | val.b_bool = (VARIANT_TRUE == V_BOOL(&arg)) ? true : false; |
|---|
| 540 | | break; |
|---|
| 541 | | |
|---|
| 542 | | case VLC_VAR_INTEGER: |
|---|
| 543 | | case VLC_VAR_HOTKEY: |
|---|
| 544 | | hr = VariantChangeType(&arg, &value, 0, VT_I4); |
|---|
| 545 | | if( SUCCEEDED(hr) ) |
|---|
| 546 | | val.i_int = V_I4(&arg); |
|---|
| 547 | | break; |
|---|
| 548 | | |
|---|
| 549 | | case VLC_VAR_FLOAT: |
|---|
| 550 | | hr = VariantChangeType(&arg, &value, 0, VT_R4); |
|---|
| 551 | | if( SUCCEEDED(hr) ) |
|---|
| 552 | | val.f_float = V_R4(&arg); |
|---|
| 553 | | break; |
|---|
| 554 | | |
|---|
| 555 | | case VLC_VAR_STRING: |
|---|
| 556 | | case VLC_VAR_MODULE: |
|---|
| 557 | | case VLC_VAR_FILE: |
|---|
| 558 | | case VLC_VAR_DIRECTORY: |
|---|
| 559 | | case VLC_VAR_VARIABLE: |
|---|
| 560 | | hr = VariantChangeType(&arg, &value, 0, VT_BSTR); |
|---|
| 561 | | if( SUCCEEDED(hr) ) |
|---|
| 562 | | { |
|---|
| 563 | | i_type = VLC_VAR_STRING; |
|---|
| 564 | | val.psz_string = CStrFromBSTR(codePage, V_BSTR(&arg)); |
|---|
| 565 | | VariantClear(&arg); |
|---|
| 566 | | } |
|---|
| 567 | | break; |
|---|
| 568 | | |
|---|
| 569 | | case VLC_VAR_TIME: |
|---|
| 570 | | // use a double value to represent time (base is expressed in seconds) |
|---|
| 571 | | hr = VariantChangeType(&arg, &value, 0, VT_R8); |
|---|
| 572 | | if( SUCCEEDED(hr) ) |
|---|
| 573 | | val.i_time = (signed __int64)(V_R8(&arg)*1000000.0); |
|---|
| 574 | | break; |
|---|
| 575 | | |
|---|
| 576 | | default: |
|---|
| 577 | | hr = DISP_E_TYPEMISMATCH; |
|---|
| 578 | | } |
|---|
| 579 | | } |
|---|
| 580 | | else { |
|---|
| 581 | | // no defined type, use type in VARIANT |
|---|
| 582 | | hr = NO_ERROR; |
|---|
| 583 | | switch( V_VT(&value) ) |
|---|
| 584 | | { |
|---|
| 585 | | case VT_BOOL: |
|---|
| 586 | | val.b_bool = (VARIANT_TRUE == V_BOOL(&value)) ? true : false; |
|---|
| 587 | | i_type = VLC_VAR_BOOL; |
|---|
| 588 | | break; |
|---|
| 589 | | case VT_I4: |
|---|
| 590 | | val.i_int = V_I4(&value); |
|---|
| 591 | | i_type = VLC_VAR_INTEGER; |
|---|
| 592 | | break; |
|---|
| 593 | | case VT_R4: |
|---|
| 594 | | val.f_float = V_R4(&value); |
|---|
| 595 | | i_type = VLC_VAR_FLOAT; |
|---|
| 596 | | break; |
|---|
| 597 | | case VT_BSTR: |
|---|
| 598 | | val.psz_string = CStrFromBSTR(codePage, V_BSTR(&value)); |
|---|
| 599 | | i_type = VLC_VAR_STRING; |
|---|
| 600 | | break; |
|---|
| 601 | | case VT_R8: |
|---|
| 602 | | // use a double value to represent time (base is expressed in seconds) |
|---|
| 603 | | val.i_time = (signed __int64)(V_R8(&value)*1000000.0); |
|---|
| 604 | | i_type = VLC_VAR_TIME; |
|---|
| 605 | | break; |
|---|
| 606 | | default: |
|---|
| 607 | | hr = DISP_E_TYPEMISMATCH; |
|---|
| 608 | | } |
|---|
| 609 | | } |
|---|
| 610 | | if( SUCCEEDED(hr) ) |
|---|
| 611 | | { |
|---|
| 612 | | hr = (VLC_SUCCESS == VLC_VariableSet(i_vlc, psz_varname, val)) ? NOERROR : E_FAIL; |
|---|
| 613 | | |
|---|
| 614 | | if( (VLC_VAR_STRING == i_type) && (NULL != val.psz_string) ) |
|---|
| 615 | | CoTaskMemFree(val.psz_string); |
|---|
| 616 | | } |
|---|
| 617 | | CoTaskMemFree(psz_varname); |
|---|
| 618 | | } |
|---|
| 619 | | return hr; |
|---|
| 620 | | #endif |
|---|
| 621 | | }; |
|---|
| 622 | | |
|---|
| 623 | | STDMETHODIMP VLCControl::getVariable( BSTR name, VARIANT *value) |
|---|
| 624 | | { |
|---|
| | 515 | }; |
|---|
| | 516 | |
|---|
| | 517 | STDMETHODIMP VLCControl::getVariable(BSTR name, VARIANT *value) |
|---|
| | 518 | { |
|---|
| | 519 | /** getVariable() is an unsafe interface because of security |
|---|
| | 520 | implications it has and is thus removed. */ |
|---|
| 626 | | #if 0 |
|---|
| 627 | | if( NULL == value ) |
|---|
| 628 | | return E_POINTER; |
|---|
| 629 | | |
|---|
| 630 | | VariantInit(value); |
|---|
| 631 | | |
|---|
| 632 | | if( 0 == SysStringLen(name) ) |
|---|
| 633 | | return E_INVALIDARG; |
|---|
| 634 | | |
|---|
| 635 | | libvlc_instance_t *p_libvlc; |
|---|
| 636 | | HRESULT hr = _p_instance->getVLC(&p_libvlc); |
|---|
| 637 | | if( SUCCEEDED(hr) ) |
|---|
| 638 | | { |
|---|
| 639 | | UINT codePage = _p_instance->getCodePage(); |
|---|
| 640 | | char *psz_varname = CStrFromBSTR(codePage, name); |
|---|
| 641 | | if( NULL == psz_varname ) |
|---|
| 642 | | return E_OUTOFMEMORY; |
|---|
| 643 | | |
|---|
| 644 | | hr = E_INVALIDARG; |
|---|
| 645 | | |
|---|
| 646 | | vlc_value_t val; |
|---|
| 647 | | int i_type; |
|---|
| 648 | | |
|---|
| 649 | | if( (VLC_SUCCESS == VLC_VariableGet(i_vlc, psz_varname, &val)) |
|---|
| 650 | | && (VLC_SUCCESS == VLC_VariableType(i_vlc, psz_varname, &i_type)) ) |
|---|
| 651 | | { |
|---|
| 652 | | hr = NOERROR; |
|---|
| 653 | | switch( i_type ) |
|---|
| 654 | | { |
|---|
| 655 | | case VLC_VAR_BOOL: |
|---|
| 656 | | V_VT(value) = VT_BOOL; |
|---|
| 657 | | V_BOOL(value) = val.b_bool ? VARIANT_TRUE : VARIANT_FALSE; |
|---|
| 658 | | break; |
|---|
| 659 | | |
|---|
| 660 | | case VLC_VAR_INTEGER: |
|---|
| 661 | | case VLC_VAR_HOTKEY: |
|---|
| 662 | | V_VT(value) = VT_I4; |
|---|
| 663 | | V_I4(value) = val.i_int; |
|---|
| 664 | | break; |
|---|
| 665 | | |
|---|
| 666 | | case VLC_VAR_FLOAT: |
|---|
| 667 | | V_VT(value) = VT_R4; |
|---|
| 668 | | V_R4(value) = val.f_float; |
|---|
| 669 | | break; |
|---|
| 670 | | |
|---|
| 671 | | case VLC_VAR_STRING: |
|---|
| 672 | | case VLC_VAR_MODULE: |
|---|
| 673 | | case VLC_VAR_FILE: |
|---|
| 674 | | case VLC_VAR_DIRECTORY: |
|---|
| 675 | | case VLC_VAR_VARIABLE: |
|---|
| 676 | | V_VT(value) = VT_BSTR; |
|---|
| 677 | | V_BSTR(value) = BSTRFromCStr(codePage, val.psz_string); |
|---|
| 678 | | if( NULL != val.psz_string) |
|---|
| 679 | | free(val.psz_string); |
|---|
| 680 | | break; |
|---|
| 681 | | |
|---|
| 682 | | case VLC_VAR_TIME: |
|---|
| 683 | | // use a double value to represent time (base is expressed in seconds) |
|---|
| 684 | | V_VT(value) = VT_R8; |
|---|
| 685 | | V_R8(value) = ((double)val.i_time)/1000000.0; |
|---|
| 686 | | break; |
|---|
| 687 | | |
|---|
| 688 | | default: |
|---|
| 689 | | hr = DISP_E_TYPEMISMATCH; |
|---|
| 690 | | } |
|---|
| 691 | | } |
|---|
| 692 | | CoTaskMemFree(psz_varname); |
|---|
| 693 | | return hr; |
|---|
| 694 | | } |
|---|
| 695 | | return hr; |
|---|
| 696 | | #endif |
|---|