summaryrefslogtreecommitdiff
path: root/plugins/mRadio/i_myservice.inc
blob: b8338a0d8160a52c2a89eb66165e39d0494c834a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
{My services}

function Service_RadioPlayStop(wParam:WPARAM;lParam:LPARAM):int;cdecl;
var
  p:PAnsiChar;
  lnew:bool;
  hContact:THANDLE;
  cni:TCONTACTINFO;
  i:integer;
begin
  result:=0;
  if lParam=0 then
  begin
    if wParam=0 then
      wParam:=GetCListSelContact;
    p:=GetContactProtoAcc(wParam);
    if (p=nil) or (StrCmp(p,PluginName)<>0) then
      exit;
    hContact:=wParam;
  end
  // wParam = station name
  else
  begin
    FillChar(cni,SizeOf(cni),0);
    cni.cbSize  :=sizeof(cni);
    if lParam=1 then
      cni.dwFlag:=CNF_DISPLAY
    else
      cni.dwFlag:=CNF_DISPLAY or CNF_UNICODE;
    cni.szProto :=PluginName;

    hContact:=CallService(MS_DB_CONTACT_FINDFIRST,0,0);
    while hContact<>0 do
    begin
      p:=PAnsiChar(CallService(MS_PROTO_GETCONTACTBASEPROTO,hContact,0));
      if (p<>nil) and (StrCmp(p,PluginName)=0) then
      begin
        cni.hContact:=hContact;
        if CallService(MS_CONTACT_GETCONTACTINFO,0,tlparam(@cni))=0 then
        begin
          if lParam=1 then
            i:=StrCmp(pAnsiChar(wParam),cni.retval.szVal.a)
          else
            i:=StrCmpW(pWideChar(wParam),cni.retval.szVal.w);
          mir_free(cni.retval.szVal.w);
          if i=0 then
            break;
        end;
      end;
      hContact:=CallService(MS_DB_CONTACT_FINDNEXT,hContact,0);
    end;
  end;

  if hContact<>0 then
  begin
    result:=1;
    if PluginStatus=ID_STATUS_OFFLINE then
      Service_SetStatus(ID_STATUS_ONLINE,0);

    case CallService(MS_RADIO_COMMAND,MRC_STATUS,RD_STATUS_GET) of
      RD_STATUS_CONNECT: begin //break while connect
        CallService(MS_RADIO_COMMAND,MRC_STATUS,RD_STATUS_ABORT);
        exit;
      end;
      RD_STATUS_ABORT: exit;
    end;

    lnew:=ActiveContact<>hContact;

    if ActiveContact<>0 then
      CallService(MS_RADIO_COMMAND,MRC_STOP,1);

    if lnew then
      CallService(MS_RADIO_COMMAND,MRC_PLAY,hContact);
  end;
end;

function Service_RadioSettings(wParam:WPARAM;lParam:LPARAM):int;cdecl;
var
  ood:TOPENOPTIONSDIALOG;
begin
  result:=0;
  ood.cbSize:=SizeOf(ood);
  ood.pszGroup:='Network';
  ood.pszPage :=PluginName;
  ood.pszTab  :=Translate('Advanced');
  CallService(MS_OPT_OPENOPTIONS,0,tlparam(@ood));
end;

function Service_RadioRecord(wParam:WPARAM;lParam:LPARAM):int;cdecl;
begin
  if lParam<>0 then lParam:=TLPARAM(-1) else lParam:=0;

  result:=CallService(MS_RADIO_COMMAND,MRC_RECORD,lParam);
end;

function Service_RadioGetVolume(wParam:WPARAM;lParam:LPARAM):int;cdecl;
begin
  result:=gVolume;
end;

function Service_RadioSetVolume(wParam:WPARAM;lParam:LPARAM):int;cdecl;
begin
  result:=Service_RadioGetVolume(0,0);
  SetSndVol(wParam);

  DBWriteByte(0,PluginName,optVolume,ABS(wParam));
  if lParam<>2 then // not from Frame
    if hVolFrmCtrl<>0 then
      SendMessage(hVolFrmCtrl,TBM_SETPOS,1,ABS(wParam));

  if lParam<>1 then // not from Settings
    if hVolCtrl<>0 then
      SendMessage(hVolCtrl,TBM_SETPOS,1,ABS(wParam));

end;

function Service_RadioMute(wParam:WPARAM;lParam:LPARAM):int;cdecl;
var
{$IFDEF KOL_MCK}
  med:TMouseEventData;
{$ELSE}
  tmp:pAnsiChar;
{$ENDIF}
begin
  if gVolume=0 then
    gVolume:=-1
  else
    gVolume:=-gVolume;
  Result:=Service_RadioSetVolume(gVolume,0);
  if hVolFrmCtrl<>0 then
    EnableWindow(hVolFrmCtrl,gVolume>=0);

{$IFDEF KOL_MCK}
  if lParam=0 then // 0 - from Service, not frame
  begin
    if btnMute<>nil then
    begin
      FillChar(med,SizeOf(med),0);
      med.Button:=mbLeft;
      med.StopHandling:=true;
      btnMute.OnMouseDown(btnMute,med);
  //    btnMute.Click; // without click processing
      btnMute.OnMouseUp  (btnMute,med);
      btnMute.Invalidate;
    end
  end;
{$ELSE}
  if hMuteFrmCtrl<>0 then
  begin
    if gVolume<0 then
      tmp:=IcoBtnOff
    else
      tmp:=IcoBtnOn;
    SetButtonIcon(hMuteFrmCtrl,tmp);
  end;
{$ENDIF}
end;

function Service_EqOnOff(wParam:WPARAM;lParam:LPARAM):int;cdecl;
begin
  result:=ord(isEQ_OFF=BST_UNCHECKED);
  case wParam of
    0: begin
      if isEQ_OFF=BST_UNCHECKED then
        EQ_OFF
      else
        EQ_ON;
    end;
    1: EQ_ON;
  else
    EQ_OFF;
  end;
  if eq[0].wnd<>0 then // if options opened
  begin
    CheckDlgButton(GetParent(eq[0].wnd),IDC_EQOFF,isEQ_OFF);
  end;
end;