Changeset 17350


Ignore:
Timestamp:
10/04/2016 06:34:10 PM (8 months ago)
Author:
ghazan
Message:

code reordering (local code moved into ListeningTo?)

Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/ListeningTo/src/listeningto.cpp

    r17267 r17350  
    2020#include "stdafx.h" 
    2121 
    22 CLIST_INTERFACE *pcli; 
    23 int hLangpack; 
    24  
    25 PLUGININFOEX pluginInfo = { 
    26         sizeof(PLUGININFOEX), 
    27         __PLUGIN_NAME, 
    28         PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), 
    29         __DESCRIPTION, 
    30         __AUTHOR, 
    31         __AUTHOREMAIL, 
    32         __COPYRIGHT, 
    33         __AUTHORWEB, 
    34         UNICODE_AWARE, 
    35         // {F981F3F5-035A-444F-9892-CA722C195ADA} 
    36         { 0xf981f3f5, 0x35a, 0x444f, { 0x98, 0x92, 0xca, 0x72, 0x2c, 0x19, 0x5a, 0xda } } 
    37 }; 
    38  
    39 HINSTANCE hInst; 
    40  
    41 static HANDLE hEnableStateChangedEvent; 
    4222HANDLE hExtraIcon; 
    4323static HGENMENU hMainMenuGroup = NULL; 
    44 static HANDLE hListeningInfoChangedEvent = NULL; 
     24static HANDLE hListeningInfoChangedEvent; 
     25static HANDLE hEnableStateChangedEvent; 
    4526 
    4627static HANDLE hTTB = NULL; 
     
    4930static DWORD lastInfoSetTime = 0; 
    5031 
     32static IconItem iconList[] = 
     33{ 
     34        { LPGEN("Listening to (enabled)"), "listening_to_icon", IDI_LISTENINGTO }, 
     35        { LPGEN("Listening to (disabled)"), "listening_off_icon", IDI_LISTENINGOFF }, 
     36}; 
     37 
    5138std::vector<ProtocolInfo> proto_items; 
    5239 
    53 int ModulesLoaded(WPARAM wParam, LPARAM lParam); 
    54 int PreShutdown(WPARAM wParam, LPARAM lParam); 
    5540int PreBuildContactMenu(WPARAM wParam, LPARAM lParam); 
    5641int TopToolBarLoaded(WPARAM wParam, LPARAM lParam); 
     
    7459INT_PTR HotkeysToggle(WPARAM wParam, LPARAM lParam); 
    7560 
    76 wchar_t* VariablesParseInfo(ARGUMENTSINFO *ai); 
    77 wchar_t* VariablesParseType(ARGUMENTSINFO *ai); 
    78 wchar_t* VariablesParseArtist(ARGUMENTSINFO *ai); 
    79 wchar_t* VariablesParseAlbum(ARGUMENTSINFO *ai); 
    80 wchar_t* VariablesParseTitle(ARGUMENTSINFO *ai); 
    81 wchar_t* VariablesParseTrack(ARGUMENTSINFO *ai); 
    82 wchar_t* VariablesParseYear(ARGUMENTSINFO *ai); 
    83 wchar_t* VariablesParseGenre(ARGUMENTSINFO *ai); 
    84 wchar_t* VariablesParseLength(ARGUMENTSINFO *ai); 
    85 wchar_t* VariablesParsePlayer(ARGUMENTSINFO *ai); 
    86  
    87  
    8861#define XSTATUS_MUSIC 11 
    89  
    90 #define UNKNOWN(_X_) ( _X_ == NULL || _X_[0] == '\0' ? opts.unknown : _X_ ) 
    91  
    92 // Functions //////////////////////////////////////////////////////////////////////////// 
    93  
    94 extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD, LPVOID) 
    95 { 
    96         hInst = hinstDLL; 
    97         return TRUE; 
    98 } 
    99  
    100 extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD) 
    101 { 
    102         return &pluginInfo; 
    103 } 
    104  
    105 static IconItem iconList[] = 
    106 { 
    107         { LPGEN("Listening to (enabled)"), "listening_to_icon", IDI_LISTENINGTO }, 
    108         { LPGEN("Listening to (disabled)"), "listening_off_icon", IDI_LISTENINGOFF }, 
    109 }; 
    110  
    111 extern "C" int __declspec(dllexport) Load(void) 
    112 { 
    113         mir_getLP(&pluginInfo); 
    114         pcli = Clist_GetInterface(); 
    115  
    116         CoInitialize(NULL); 
    117  
    118         // Services 
    119         CreateServiceFunction(MS_LISTENINGTO_ENABLED, ListeningToEnabled); 
    120         CreateServiceFunction(MS_LISTENINGTO_ENABLE, EnableListeningTo); 
    121         CreateServiceFunction(MS_LISTENINGTO_GETTEXTFORMAT, GetTextFormat); 
    122         CreateServiceFunction(MS_LISTENINGTO_GETPARSEDTEXT, GetParsedFormat); 
    123         CreateServiceFunction(MS_LISTENINGTO_OVERRIDECONTACTOPTION, GetOverrideContactOption); 
    124         CreateServiceFunction(MS_LISTENINGTO_GETUNKNOWNTEXT, GetUnknownText); 
    125         CreateServiceFunction(MS_LISTENINGTO_MAINMENU, MainMenuClicked); 
    126         CreateServiceFunction(MS_LISTENINGTO_SET_NEW_SONG, SetNewSong); 
    127         CreateServiceFunction(MS_LISTENINGTO_HOTKEYS_ENABLE, HotkeysEnable); 
    128         CreateServiceFunction(MS_LISTENINGTO_HOTKEYS_DISABLE, HotkeysDisable); 
    129         CreateServiceFunction(MS_LISTENINGTO_HOTKEYS_TOGGLE, HotkeysToggle); 
    130  
    131         // Hooks 
    132         HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); 
    133         HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown); 
    134         HookEvent(ME_DB_CONTACT_SETTINGCHANGED, SettingChanged); 
    135  
    136         hEnableStateChangedEvent = CreateHookableEvent(ME_LISTENINGTO_ENABLE_STATE_CHANGED); 
    137         hListeningInfoChangedEvent = CreateHookableEvent(ME_LISTENINGTO_LISTENING_INFO_CHANGED); 
    138  
    139         InitMusic(); 
    140         InitOptions(); 
    141  
    142         // icons 
    143         Icon_Register(hInst, LPGEN("ListeningTo"), iconList, _countof(iconList)); 
    144  
    145         // Extra icon support 
    146         hExtraIcon = ExtraIcon_RegisterIcolib(MODULE_NAME "_icon", LPGEN("Listening to music"), "listening_to_icon"); 
    147         return 0; 
    148 } 
    149  
    150 extern "C" int __declspec(dllexport) Unload(void) 
    151 { 
    152         CoUninitialize(); 
    153  
    154         return 0; 
    155 } 
    15662 
    15763void UpdateGlobalStatusMenus() 
     
    268174int ModulesLoaded(WPARAM, LPARAM) 
    269175{ 
     176        // Extra icon support 
     177        hExtraIcon = ExtraIcon_RegisterIcolib(MODULE_NAME "_icon", LPGEN("Listening to music"), "listening_to_icon"); 
     178 
    270179        EnableDisablePlayers(); 
    271180 
     
    504413} 
    505414 
     415static void ReplaceVars(Buffer<wchar_t> *buffer, MCONTACT hContact, wchar_t **variables, int numVariables) 
     416{ 
     417        if (buffer->len < 3) 
     418                return; 
     419 
     420        if (numVariables < 0) 
     421                return; 
     422 
     423        for (size_t i = buffer->len - 1; i > 0; i--) { 
     424                if (buffer->str[i] == '%') { 
     425                        // Find previous 
     426                        size_t j; 
     427                        for (j = i - 1; j > 0 && ((buffer->str[j] >= 'a' && buffer->str[j] <= 'z') 
     428                                || (buffer->str[j] >= 'A' && buffer->str[j] <= 'Z') 
     429                                || buffer->str[j] == '-' 
     430                                || buffer->str[j] == '_'); j--); 
     431 
     432                        if (buffer->str[j] == '%') { 
     433                                size_t foundLen = i - j + 1; 
     434                                if (foundLen == 9 && wcsncmp(&buffer->str[j], L"%contact%", 9) == 0) { 
     435                                        buffer->replace(j, i + 1, pcli->pfnGetContactDisplayName(hContact, 0)); 
     436                                } 
     437                                else if (foundLen == 6 && wcsncmp(&buffer->str[j], L"%date%", 6) == 0) { 
     438                                        wchar_t tmp[128]; 
     439                                        TimeZone_ToStringT(time(NULL), L"d s", tmp, _countof(tmp)); 
     440                                        buffer->replace(j, i + 1, tmp); 
     441                                } 
     442                                else { 
     443                                        for (int k = 0; k < numVariables; k += 2) { 
     444                                                size_t len = mir_wstrlen(variables[k]); 
     445                                                if (foundLen == len + 2 && wcsncmp(&buffer->str[j] + 1, variables[k], len) == 0) { 
     446                                                        buffer->replace(j, i + 1, variables[k + 1]); 
     447                                                        break; 
     448                                                } 
     449                                        } 
     450                                } 
     451                        } 
     452 
     453                        i = j; 
     454                        if (i == 0) 
     455                                break; 
     456                } 
     457                else if (buffer->str[i] == '\\' && i + 1 <= buffer->len - 1 && buffer->str[i + 1] == 'n') { 
     458                        buffer->str[i] = '\r'; 
     459                        buffer->str[i + 1] = '\n'; 
     460                } 
     461        } 
     462} 
     463 
     464void ReplaceTemplate(Buffer<wchar_t> *out, MCONTACT hContact, wchar_t *templ, wchar_t **vars, int numVars) 
     465{ 
     466 
     467        if (ServiceExists(MS_VARS_FORMATSTRING)) { 
     468                wchar_t *tmp = variables_parse_ex(templ, NULL, hContact, vars, numVars); 
     469                if (tmp != NULL) { 
     470                        out->append(tmp); 
     471                        mir_free(tmp); 
     472                        out->pack(); 
     473                        return; 
     474                } 
     475        } 
     476 
     477        out->append(templ); 
     478        ReplaceVars(out, hContact, vars, numVars); 
     479        out->pack(); 
     480} 
     481 
    506482void SetListeningInfo(char *proto, LISTENINGTOINFO *lti = NULL) 
    507483{ 
     
    903879} 
    904880 
    905 wchar_t* VariablesParseInfo(ARGUMENTSINFO *ai) 
    906 { 
    907         if (ai->cbSize < sizeof(ARGUMENTSINFO)) 
    908                 return NULL; 
    909  
    910         LISTENINGTOINFO *lti = GetListeningInfo(); 
    911         if (lti == NULL) { 
    912                 ai->flags = AIF_FALSE; 
    913                 return mir_wstrdup(L""); 
    914         } 
    915  
    916         wchar_t *fr[] = { 
    917                 L"artist", UNKNOWN(lti->ptszArtist), 
    918                 L"album", UNKNOWN(lti->ptszAlbum), 
    919                 L"title", UNKNOWN(lti->ptszTitle), 
    920                 L"track", UNKNOWN(lti->ptszTrack), 
    921                 L"year", UNKNOWN(lti->ptszYear), 
    922                 L"genre", UNKNOWN(lti->ptszGenre), 
    923                 L"length", UNKNOWN(lti->ptszLength), 
    924                 L"player", UNKNOWN(lti->ptszPlayer), 
    925                 L"type", UNKNOWN(lti->ptszType) 
    926         }; 
    927  
    928         Buffer<wchar_t> ret; 
    929         ReplaceTemplate(&ret, NULL, opts.templ, fr, _countof(fr)); 
    930         return ret.detach(); 
    931 } 
    932  
    933 #define VARIABLES_PARSE_BODY(__field__) \ 
    934         if (ai == NULL || ai->cbSize < sizeof(ARGUMENTSINFO)) \ 
    935                 return NULL; \ 
    936         \ 
    937         LISTENINGTOINFO *lti = GetListeningInfo(); \ 
    938         if (lti == NULL) \ 
    939                         { \ 
    940                 ai->flags = AIF_FALSE; \ 
    941                 return mir_wstrdup(L""); \ 
    942                         } \ 
    943                                 else if (IsEmpty(lti->__field__))  \ 
    944         { \ 
    945                 ai->flags = AIF_FALSE; \ 
    946                 return mir_wstrdup(opts.unknown); \ 
    947         } \ 
    948                                 else \ 
    949         { \ 
    950                 ai->flags = AIF_DONTPARSE; \ 
    951                 wchar_t *ret = mir_wstrdup(lti->__field__); \ 
    952                 return ret; \ 
    953         } 
    954  
    955  
    956 wchar_t* VariablesParseType(ARGUMENTSINFO *ai) 
    957 { 
    958         VARIABLES_PARSE_BODY(ptszType); 
    959 } 
    960  
    961 wchar_t* VariablesParseArtist(ARGUMENTSINFO *ai) 
    962 { 
    963         VARIABLES_PARSE_BODY(ptszArtist); 
    964 } 
    965  
    966 wchar_t* VariablesParseAlbum(ARGUMENTSINFO *ai) 
    967 { 
    968         VARIABLES_PARSE_BODY(ptszAlbum); 
    969 } 
    970  
    971 wchar_t* VariablesParseTitle(ARGUMENTSINFO *ai) 
    972 { 
    973         VARIABLES_PARSE_BODY(ptszTitle); 
    974 } 
    975  
    976 wchar_t* VariablesParseTrack(ARGUMENTSINFO *ai) 
    977 { 
    978         VARIABLES_PARSE_BODY(ptszTrack); 
    979 } 
    980  
    981 wchar_t* VariablesParseYear(ARGUMENTSINFO *ai) 
    982 { 
    983         VARIABLES_PARSE_BODY(ptszYear); 
    984 } 
    985  
    986 wchar_t* VariablesParseGenre(ARGUMENTSINFO *ai) 
    987 { 
    988         VARIABLES_PARSE_BODY(ptszGenre); 
    989 } 
    990  
    991 wchar_t* VariablesParseLength(ARGUMENTSINFO *ai) 
    992 { 
    993         VARIABLES_PARSE_BODY(ptszLength); 
    994 } 
    995  
    996 wchar_t* VariablesParsePlayer(ARGUMENTSINFO *ai) 
    997 { 
    998         VARIABLES_PARSE_BODY(ptszPlayer); 
    999 } 
     881///////////////////////////////////////////////////////////////////////////////////////// 
     882 
     883void InitServices() 
     884{ 
     885        // Services 
     886        CreateServiceFunction(MS_LISTENINGTO_ENABLED, ListeningToEnabled); 
     887        CreateServiceFunction(MS_LISTENINGTO_ENABLE, EnableListeningTo); 
     888        CreateServiceFunction(MS_LISTENINGTO_GETTEXTFORMAT, GetTextFormat); 
     889        CreateServiceFunction(MS_LISTENINGTO_GETPARSEDTEXT, GetParsedFormat); 
     890        CreateServiceFunction(MS_LISTENINGTO_OVERRIDECONTACTOPTION, GetOverrideContactOption); 
     891        CreateServiceFunction(MS_LISTENINGTO_GETUNKNOWNTEXT, GetUnknownText); 
     892        CreateServiceFunction(MS_LISTENINGTO_MAINMENU, MainMenuClicked); 
     893        CreateServiceFunction(MS_LISTENINGTO_SET_NEW_SONG, SetNewSong); 
     894        CreateServiceFunction(MS_LISTENINGTO_HOTKEYS_ENABLE, HotkeysEnable); 
     895        CreateServiceFunction(MS_LISTENINGTO_HOTKEYS_DISABLE, HotkeysDisable); 
     896        CreateServiceFunction(MS_LISTENINGTO_HOTKEYS_TOGGLE, HotkeysToggle); 
     897 
     898        // Hooks 
     899        HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); 
     900        HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown); 
     901        HookEvent(ME_DB_CONTACT_SETTINGCHANGED, SettingChanged); 
     902 
     903        // icons 
     904        Icon_Register(hInst, LPGEN("ListeningTo"), iconList, _countof(iconList)); 
     905} 
  • trunk/plugins/ListeningTo/src/stdafx.h

    r17138 r17350  
    112112#define U2T(_X_) ( IsEmpty(_X_) ? NULL : mir_wstrdup(_X_)) 
    113113#define U2TD(_X_, _DEF_) ( IsEmpty(_X_) ? mir_wstrdup(_DEF_) : mir_wstrdup(_X_)) 
     114#define UNKNOWN(_X_) ( _X_ == NULL || _X_[0] == '\0' ? opts.unknown : _X_ ) 
    114115 
     116void InitServices(); 
     117 
     118void ReplaceTemplate(Buffer<wchar_t> *out, MCONTACT hContact, wchar_t *templ, wchar_t **vars, int numVars); 
     119 
     120wchar_t* VariablesParseInfo(ARGUMENTSINFO *ai); 
     121wchar_t* VariablesParseType(ARGUMENTSINFO *ai); 
     122wchar_t* VariablesParseArtist(ARGUMENTSINFO *ai); 
     123wchar_t* VariablesParseAlbum(ARGUMENTSINFO *ai); 
     124wchar_t* VariablesParseTitle(ARGUMENTSINFO *ai); 
     125wchar_t* VariablesParseTrack(ARGUMENTSINFO *ai); 
     126wchar_t* VariablesParseYear(ARGUMENTSINFO *ai); 
     127wchar_t* VariablesParseGenre(ARGUMENTSINFO *ai); 
     128wchar_t* VariablesParseLength(ARGUMENTSINFO *ai); 
     129wchar_t* VariablesParsePlayer(ARGUMENTSINFO *ai); 
    115130 
    116131#endif // __COMMONS_H__ 
  • trunk/utils/mir_buffer.h

    r17138 r17350  
    435435}; 
    436436 
    437  
    438 static void ReplaceVars(Buffer<wchar_t> *buffer, MCONTACT hContact, wchar_t **variables, int numVariables) 
    439 { 
    440         if (buffer->len < 3) 
    441                 return; 
    442  
    443         if (numVariables < 0) 
    444                 return; 
    445  
    446         for(size_t i = buffer->len - 1; i > 0; i--) 
    447         { 
    448                 if (buffer->str[i] == '%') 
    449                 { 
    450                         // Find previous 
    451                         size_t j; 
    452                         for(j = i - 1; j > 0 && ((buffer->str[j] >= 'a' && buffer->str[j] <= 'z') 
    453                                                                     || (buffer->str[j] >= 'A' && buffer->str[j] <= 'Z') 
    454                                                                         || buffer->str[j] == '-' 
    455                                                                         || buffer->str[j] == '_'); j--) ; 
    456  
    457                         if (buffer->str[j] == '%') 
    458                         { 
    459                                 size_t foundLen = i - j + 1; 
    460                                 if (foundLen == 9 && wcsncmp(&buffer->str[j], L"%contact%", 9) == 0) 
    461                                 { 
    462                                         buffer->replace(j, i + 1, pcli->pfnGetContactDisplayName(hContact, 0)); 
    463                                 } 
    464                                 else if (foundLen == 6 && wcsncmp(&buffer->str[j], L"%date%", 6) == 0) 
    465                                 { 
    466                                         wchar_t tmp[128]; 
    467                                         TimeZone_ToStringT(time(NULL), L"d s", tmp, _countof(tmp)); 
    468                                         buffer->replace(j, i + 1, tmp); 
    469                                 } 
    470                                 else 
    471                                 { 
    472                                         for(int k = 0; k < numVariables; k += 2) 
    473                                         { 
    474                                                 size_t len = mir_wstrlen(variables[k]); 
    475                                                 if (foundLen == len + 2 && wcsncmp(&buffer->str[j]+1, variables[k], len) == 0) 
    476                                                 { 
    477                                                         buffer->replace(j, i + 1, variables[k + 1]); 
    478                                                         break; 
    479                                                 } 
    480                                         } 
    481                                 } 
    482                         } 
    483  
    484                         i = j; 
    485                         if (i == 0) 
    486                                 break; 
    487                 } 
    488                 else if (buffer->str[i] == '\\' && i+1 <= buffer->len-1 && buffer->str[i+1] == 'n') 
    489                 { 
    490                         buffer->str[i] = '\r'; 
    491                         buffer->str[i+1] = '\n'; 
    492                 } 
    493         } 
    494 } 
    495  
    496  
    497 static void ReplaceTemplate(Buffer<wchar_t> *out, MCONTACT hContact, wchar_t *templ, wchar_t **vars, int numVars) 
    498 { 
    499  
    500         if (ServiceExists(MS_VARS_FORMATSTRING)) 
    501         { 
    502                 wchar_t *tmp = variables_parse_ex(templ, NULL, hContact, vars, numVars); 
    503                 if (tmp != NULL) 
    504                 { 
    505                         out->append(tmp); 
    506                         mir_free(tmp); 
    507                         out->pack(); 
    508                         return; 
    509                 } 
    510         } 
    511  
    512         out->append(templ); 
    513         ReplaceVars(out, hContact, vars, numVars); 
    514         out->pack(); 
    515 } 
    516  
    517  
    518437#endif // __MIR_BUFFER_H__ 
Note: See TracChangeset for help on using the changeset viewer.