亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? winrecurrence.cpp

?? funambol windows mobile plugin source code, the source code is taken from the funambol site
?? CPP
字號(hào):
 /*
 * Copyright (C) 2007 Funambol, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY, TITLE, NONINFRINGEMENT 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., 59 Temple Place, Suite 330, Boston, MA
 * 02111-1307  USA
*/

#include "base/util/utils.h"
#include "base/stringUtils.h"
#include "vocl/WinRecurrence.h"
#include "vocl/constants.h"
#include <oleauto.h>

using namespace std;


// Constructor
WinRecurrence::WinRecurrence() {
    rrule = L"";
}

// Constructor: fills propertyMap parsing the passed RRULE
WinRecurrence::WinRecurrence(const wstring dataString, const DATE startDate) {
    rrule = L"";
    parse(dataString, startDate);
}

// Destructor
WinRecurrence::~WinRecurrence() {
}




// Format and return a RRULE string from the propertyMap.
wstring& WinRecurrence::toString() {

    rrule = L"";

    WCHAR* days = NULL;
    WCHAR recurrence[100];
    wsprintf(recurrence, L"");

    //
    // Conversion: WinRecurrence -> RRULE.
    // -----------------------------------
    //
    // Init with default values.
    int  recType     = -1;
    int  interval    = 1;
    int  occurrences = 0;
    int  dayofweek   = 0;
    int  dayofmonth  = 0;
    int  instance    = 1;
    int  monthofyear = 0;
    BOOL noEnd       = FALSE;
    wstring pStart   = L"";
    wstring pEnd     = L"";

    // Read all values from propertyMap.
    wstring tmp;
    getProperty(L"RecurrenceType", tmp);       recType     = _wtoi(tmp.c_str());
    getProperty(L"Interval",       tmp);       interval    = _wtoi(tmp.c_str());
    getProperty(L"Occurrences",    tmp);       occurrences = _wtoi(tmp.c_str());
    getProperty(L"DayOfWeekMask",  tmp);       dayofweek   = _wtoi(tmp.c_str());
    getProperty(L"DayOfMonth",     tmp);       dayofmonth  = _wtoi(tmp.c_str());
    getProperty(L"Instance",       tmp);       instance    = _wtoi(tmp.c_str());
    getProperty(L"MonthOfYear",    tmp);       monthofyear = _wtoi(tmp.c_str());
    getProperty(L"NoEndDate",      tmp);       noEnd       = _wtoi(tmp.c_str());
    getProperty(L"PatternStartDate", pStart);
    getProperty(L"PatternEndDate",   pEnd);


    replaceAll(L"-", L"", pStart);   // **** To be removed!!! ****
    replaceAll(L"-", L"", pEnd);     // **** To be removed!!! ****


    switch(recType) {

        // Daily = 0
        case winRecursDaily: {
            if(interval > 0)
                wsprintf(recurrence, TEXT("D%ld #%ld"), interval, occurrences);
            else if (dayofweek > 0) {
                WCHAR* days = daysOfWeekToString(dayofweek);
                if (days) {
                    wsprintf(recurrence, TEXT("W1 %s %s #%ld"), days, pEnd.c_str(), occurrences);
                    delete [] days;
                }
            }
            break;
        }

        // Weekly = 1
        case winRecursWeekly: {
            if (dayofweek > 0) {
                days = daysOfWeekToString(dayofweek);
                if (days) {
                    if(noEnd)
                        wsprintf(recurrence, TEXT("W%ld %s #0"), interval, days);
                    else
                        wsprintf(recurrence, TEXT("W%ld %s%s #%ld"), interval, days, pEnd.c_str(), occurrences);
                    delete [] days;
                }
            }
            break;
        }
        
        // Monthly = 2
        case winRecursMonthly: {
            if(dayofmonth > 0) {
                if(noEnd)
                    wsprintf(recurrence, TEXT("MD%ld %ld #0"), interval, dayofmonth);
                else {
                    wsprintf(recurrence, TEXT("MD%ld %ld %s #%ld"), interval, dayofmonth, pEnd.c_str(), occurrences);
                }
                break;
            }
        }
        
        // MonthNth = 3
        case winRecursMonthNth: {
            if(instance>0 && dayofweek>0) {
                days = daysOfWeekToString(dayofweek);
                if(days) {
                    if(noEnd)
                        wsprintf(recurrence, TEXT("MP%ld %ld+ %s #0"), interval, instance, days);
                    else
                        wsprintf(recurrence, TEXT("MP%ld %ld+ %s%s #%ld"), interval, instance, days, pEnd.c_str(), occurrences);
                    delete [] days;
                }
            }
            break;
        }

        // Yearly = 5
        case winRecursYearly: {
            if(dayofmonth>0 && monthofyear>0) {
                if(noEnd)
                    wsprintf(recurrence, TEXT("YM1 %ld #0"), monthofyear);
                else
                    wsprintf(recurrence, TEXT("YM1 %ld #%ld"), monthofyear, occurrences);
            }
            break;
        }
        
        // YearNth = 6
        case winRecursYearNth: {
            if(dayofweek>0 && instance>0) {
                days = daysOfWeekToString(dayofweek);
                if(days) {
                    if(noEnd)
                        wsprintf(recurrence, TEXT("MP12 %ld+ %s #0"), instance, days);
                    else
                        wsprintf(recurrence, TEXT("MP12 %ld+ %s%s #%ld"), instance, days, pEnd.c_str(), occurrences);
                    delete [] days;
                }
            }
            break;
        }

        default: {
            // Error!
            break;
        }
    }

    rrule = recurrence;
    return rrule;
}




// Parse a RRULE string and fills the propertyMap.
int WinRecurrence::parse(const wstring dataString, const DATE startDate) {

    int ret = 0;
    WCHAR* str = wstrdup(dataString.c_str());
    WCHAR seps[] = TEXT(" ");
    WCHAR* token = wcstok(str, seps);

    int recType     = -1;
    int interval    =  0;
    int occurences  =  0;
    int dayOfMonth  = -1;
    int weekOfMonth = -1;
    int monthOfYear = -1;


    //
    // First token will be: "D|W|MP|MD|YM|YD<interval>"
    //
    if(token[0] == TEXT('D')) {
        recType = winRecursDaily;
        token ++;
    }
    else if(token[0] == TEXT('W')) {
        recType = winRecursWeekly;
        token ++;
    }
    else if(token[0] == TEXT('M') && token[1] == TEXT('D')) {
        recType = winRecursMonthly;
        token += 2;
    }
    else if(token[0] == TEXT('M') && token[1] == TEXT('P')) {
        recType = winRecursMonthNth;
        token += 2;
    }
    else if(token[0] == TEXT('Y') && token[1] == TEXT('D')) {
        // "YD" Not supported!!
        LOG.info("WinRecurrence::parse - Warning: RecurrenceType 'YD' not supported: \"%ls\"", dataString.c_str());
        goto finally;
    }
    else if(token[0] == TEXT('Y') && token[1] == TEXT('M')) {
        recType = winRecursYearly;
        token += 2;
    }

    interval = _wtoi(token);
    if(!interval || recType == -1) {
        goto error;
    }


    WCHAR* days = new WCHAR[30];
    wcscpy(days, L"");
    WCHAR* mOfYear = new WCHAR[20];
    wcscpy(mOfYear, L"");


    token = wcstok(NULL, seps);
    while (token) {
        //
        // Daily = 0
        //
        if(recType == winRecursDaily) {
            if(wcschr(token, TEXT('#'))) {
                setIntProperty(L"RecurrenceType", recType);
                setIntProperty(L"Interval",      interval);
                occurences = _wtoi(token+1);
                if(occurences == 0)             setIntProperty(L"NoEndDate",   TRUE);
                else                            setIntProperty(L"Occurrences", occurences);
                token ++;
            }
            else if(token[8] == TEXT('T')) {
                setIntProperty(L"RecurrenceType", recType);
                setProperty(L"PatternEndDate",      token);
                setIntProperty(L"Interval",      interval);
            }
        }
        //
        // Weekly = 1
        //
        else if(recType == winRecursWeekly) {
            if(wcschr(token, TEXT('#'))) {
                setIntProperty(L"RecurrenceType", recType);
                setIntProperty(L"Interval",      interval);
                occurences = _wtoi(token+1);
                if(occurences == 0)             setIntProperty(L"NoEndDate",   TRUE);
                else                            setIntProperty(L"Occurrences", occurences);
                if(wcscmp(days, L""))           setIntProperty(L"DayOfWeekMask", stringToDaysOfWeek(days));
                else                            setIntProperty(L"DayOfWeekMask", getWeekDayFromDate(startDate)); 
                token++;
            }
            else if(token[8] == TEXT('T')) {
                setIntProperty(L"RecurrenceType", recType);
                setProperty(L"PatternEndDate",      token);
                setIntProperty(L"Interval",      interval);
                if(wcscmp(days, L""))          setIntProperty(L"DayOfWeekMask", stringToDaysOfWeek(days));
                else                           setIntProperty(L"DayOfWeekMask", getWeekDayFromDate(startDate)); 
            }
            else if(isWeekDay(token)) {
                wcscat(days, token);
                wcscat(days, TEXT(" "));
            }
        }
        //
        // Monthly = 2
        //
        else if(recType == winRecursMonthly) {
            // VCalendar supports as Monthly by day rules: MD<interval> listofdates|listofdates(from end of month) <end tag>
            // On Outlook recurrence pattern only MD<interval> day <end tag> can be represented
            if(wcschr(token, TEXT('#'))) {
                setIntProperty(L"RecurrenceType", recType);
                setIntProperty(L"DayOfMonth",  dayOfMonth);
                setIntProperty(L"Interval",      interval);
                occurences = _wtoi(token+1);
                if(occurences == 0)             setIntProperty(L"NoEndDate",   TRUE);
                else                            setIntProperty(L"Occurrences", occurences);
                token++;
            }
            else if(token[8] == TEXT('T')) {
                setIntProperty(L"RecurrenceType", recType);
                setProperty(L"PatternEndDate",      token);
                setIntProperty(L"Interval",      interval);
                setIntProperty(L"DayOfMonth",  dayOfMonth);
            }
            else {
                if(dayOfMonth != -1) {
                    goto error;
                }
                dayOfMonth = _wtoi(token);
                if(dayOfMonth == 0) {
                    goto error;
                }
            }
        }
        //
        // MonthNth = 3
        //
        else if(recType == winRecursMonthNth) {
            if(wcschr(token, TEXT('#'))) {
                setIntProperty(L"RecurrenceType", recType);
                setIntProperty(L"Interval",      interval);
                setIntProperty(L"Instance",   weekOfMonth);
                setIntProperty(L"DayOfWeekMask", stringToDaysOfWeek(days));
                occurences = _wtoi(token+1);
                if(occurences == 0)             setIntProperty(L"NoEndDate",   TRUE);
                else                            setIntProperty(L"Occurrences", occurences);
                token++;
            }
            else if(token[8] == TEXT('T')) {
                setIntProperty(L"RecurrenceType", recType);
                setProperty(L"PatternEndDate",      token);
                setIntProperty(L"Interval",      interval);
                setIntProperty(L"Instance",   weekOfMonth);
                setIntProperty(L"DayOfWeekMask", stringToDaysOfWeek(days));
            }
            else if(isWeekDay(token)) {
                wcscat(days, token);
                wcscat(days, TEXT(" "));
            }
            else {
                if(token[1] != TEXT('+') && token[1] != TEXT('-')) {
                    goto error;
                }
                WCHAR sWeek[] = TEXT("\0\0");
                sWeek[0] = token[0];
                weekOfMonth = _wtoi(sWeek);
                if(token[1] == TEXT('-')) {
                    // it's the # of weeks to the end of month...
                    weekOfMonth = 5 - weekOfMonth;
                }
                if(weekOfMonth > 5 || weekOfMonth < 1) {
                    goto error;
                }
            }
        }
        //
        // Yearly = 5
        //
        else if(recType == winRecursYearly) {
            // Expected sequence will be YM1 month <end tag>
            if(wcschr(token, TEXT('#'))) {
                setIntProperty(L"RecurrenceType", recType);
                setIntProperty(L"Interval",      interval);
                setIntProperty(L"MonthOfYear",monthOfYear);
                setIntProperty(L"DayOfMonth",  dayOfMonth);
                occurences = _wtoi(token+1);
                if(occurences == 0)             setIntProperty(L"NoEndDate",   TRUE);
                else                            setIntProperty(L"Occurrences", occurences);
                token++;
            }
            else if(token[8] == TEXT('T')) {
                setIntProperty(L"RecurrenceType", recType);
                setProperty(L"PatternEndDate",      token);
                setIntProperty(L"Interval",      interval);
                setIntProperty(L"MonthOfYear",monthOfYear);
                setIntProperty(L"DayOfMonth",  dayOfMonth);
            }
            else {
                if(wcscmp(mOfYear, L"")) {
                    goto error;
                }
                wcscat(mOfYear, token);
                monthOfYear = _wtoi(mOfYear);
                SYSTEMTIME st;
                VariantTimeToSystemTime(startDate, &st);
                dayOfMonth = st.wDay;
                setIntProperty(L"RecurrenceType", recType);
                setIntProperty(L"Interval",      interval);
                setIntProperty(L"MonthOfYear",monthOfYear);
                setIntProperty(L"DayOfMonth",  dayOfMonth);
            }
        }
        token = wcstok(NULL, seps);
    }

    ret = 0;
    goto finally;

error:
    LOG.error("WinRecurrence::parse error, bad RRULE format: %ls", dataString.c_str());
    ret = 1;
    goto finally;

finally:
    if (str)     delete [] str;
    if (days)    delete [] days;
    if (mOfYear) delete [] mOfYear;
    return ret;
}






const int WinRecurrence::getIntProperty(const wstring propertyName) {
    int ret = 0;
    wstring tmp;
    if (getProperty(propertyName, tmp)) {
        ret = _wtoi(tmp.c_str());
    }
    return ret;
}


void WinRecurrence::setIntProperty(const wstring propertyName, const int propertyValue) {
    WCHAR tmp[10];
    wsprintf(tmp, TEXT("%d"), propertyValue);
    setProperty(propertyName, tmp);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清免费视频| 国产精品久久久久久福利一牛影视 | 久久成人久久爱| 欧美一级日韩一级| 国产在线精品国自产拍免费| 国产亚洲欧美激情| 成人久久久精品乱码一区二区三区 | 偷拍一区二区三区四区| 欧美成人性战久久| 国产一区在线观看视频| 国产精品久久二区二区| 欧洲国内综合视频| 麻豆传媒一区二区三区| 国产日韩高清在线| 欧美亚洲国产怡红院影院| 免费成人在线网站| 国产日韩欧美一区二区三区综合| www.欧美精品一二区| 一区二区高清视频在线观看| 欧美一级高清片| 成人一区二区三区中文字幕| 亚洲激情图片qvod| 日韩欧美一区中文| 成人免费三级在线| 亚洲成av人影院在线观看网| 久久久亚洲精华液精华液精华液 | 国产尤物一区二区| 最新欧美精品一区二区三区| 欧美精品日日鲁夜夜添| 丰满少妇在线播放bd日韩电影| 亚洲人成7777| 日韩欧美一区在线观看| 99久久婷婷国产综合精品| 亚洲va国产va欧美va观看| 精品国产1区二区| 在线观看一区二区精品视频| 韩国毛片一区二区三区| 亚洲激情在线激情| 国产欧美一区二区精品久导航 | 欧美激情综合五月色丁香 | 555www色欧美视频| 波多野结衣91| 麻豆成人免费电影| 樱花草国产18久久久久| 久久免费视频一区| 91精品国产aⅴ一区二区| 99久久99久久精品国产片果冻 | 精品一区在线看| 亚洲精品午夜久久久| 久久久三级国产网站| 欧美区在线观看| 成人午夜短视频| 蜜桃一区二区三区在线观看| 亚洲欧美另类图片小说| 久久一区二区三区国产精品| 91精品国产福利| 91久久国产综合久久| 盗摄精品av一区二区三区| 日日摸夜夜添夜夜添精品视频| 亚洲欧美日韩中文字幕一区二区三区 | 久久99精品久久久久久国产越南| 有码一区二区三区| 国产精品成人免费精品自在线观看| 日韩视频一区二区| 91麻豆精品国产自产在线观看一区 | 亚洲一级不卡视频| 亚洲丝袜另类动漫二区| 中文字幕国产一区| 国产视频一区二区在线| 欧美草草影院在线视频| 欧美一区二区福利视频| 欧美日韩免费在线视频| 日本韩国精品在线| 91在线国产福利| 丁香亚洲综合激情啪啪综合| 国产麻豆精品在线| 国产精品一线二线三线| 韩国女主播一区| 韩国三级电影一区二区| 麻豆精品国产传媒mv男同| 免费成人美女在线观看| 日产国产高清一区二区三区| 视频在线在亚洲| 丝袜美腿亚洲一区| 毛片不卡一区二区| 捆绑调教一区二区三区| 久久精品国产精品亚洲综合| 精东粉嫩av免费一区二区三区| 蜜桃视频一区二区三区| 狠狠色狠狠色合久久伊人| 国产一区二区三区精品欧美日韩一区二区三区 | 国产自产高清不卡| 国产成人在线观看免费网站| 国产成人综合在线观看| 成人免费看的视频| 91在线你懂得| 欧美日韩在线一区二区| 欧美一区二区福利视频| 2024国产精品视频| 欧美国产精品久久| 播五月开心婷婷综合| 99精品国产99久久久久久白柏 | 国内精品久久久久影院薰衣草 | 中文字幕一区二区三区乱码在线| 国产精品高清亚洲| 亚洲二区在线观看| 经典三级一区二区| 99re这里只有精品视频首页| 欧美日韩aaa| 久久久久99精品国产片| 亚洲男人都懂的| 全部av―极品视觉盛宴亚洲| 国产精品综合二区| 色综合亚洲欧洲| 欧美一级专区免费大片| 中文字幕第一区综合| 亚洲一区二区三区四区的| 激情综合网激情| 99久久久精品| 欧美电影免费观看高清完整版| 国产精品欧美综合在线| 亚洲成人tv网| 岛国精品一区二区| 欧美群妇大交群中文字幕| 国产日韩在线不卡| 亚洲第一会所有码转帖| 国产91精品免费| 91精品国产黑色紧身裤美女| 国产精品视频一二三| 亚洲va天堂va国产va久| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品久久久久久久人人人人传媒| 国产精品私人影院| 蜜臀av性久久久久av蜜臀妖精| 92精品国产成人观看免费| 日韩精品一区二区三区四区 | 亚洲成人精品一区二区| 成人免费高清在线观看| 欧美一级在线免费| 玉米视频成人免费看| 国产69精品久久99不卡| 欧美一区二区三区白人 | 亚洲成人激情社区| caoporn国产一区二区| 欧美va亚洲va国产综合| 一区二区三区精品在线观看| 高清不卡一二三区| 日韩精品在线网站| 亚洲一区二区三区四区五区中文| 成人激情电影免费在线观看| 精品国产一区二区亚洲人成毛片| 亚洲国产美国国产综合一区二区| 国产99久久久国产精品潘金网站| 日韩视频永久免费| 日韩avvvv在线播放| 欧美私人免费视频| 亚洲精品免费在线观看| 成人午夜伦理影院| 久久九九久精品国产免费直播| 奇米色一区二区| 欧美卡1卡2卡| 日本成人在线网站| 6080亚洲精品一区二区| 婷婷成人综合网| 欧美日韩高清在线播放| 亚洲一区在线电影| 91久久奴性调教| 99精品视频中文字幕| 18成人在线观看| 91麻豆自制传媒国产之光| 国产精品久久久久久久久久久免费看| 国产精品一区二区你懂的| 26uuu国产在线精品一区二区| 美女在线观看视频一区二区| 91精品国产乱| 另类综合日韩欧美亚洲| 精品国产91久久久久久久妲己| 国产在线播放一区三区四| 久久精品一区二区三区不卡| 国产91丝袜在线观看| 亚洲欧洲精品一区二区三区不卡| 成av人片一区二区| 亚洲摸摸操操av| 欧美三级三级三级| 日韩av一区二| 国产亚洲美州欧州综合国| 国产成人av一区二区三区在线 | 94-欧美-setu| 亚洲一区二区三区四区在线免费观看| 色狠狠桃花综合| 欧美aⅴ一区二区三区视频| 日韩三区在线观看| 国产一区不卡在线| 亚洲欧洲日韩一区二区三区| 91九色02白丝porn| 日韩电影在线免费| 国产午夜亚洲精品羞羞网站| 99在线精品免费| 91精彩视频在线观看| 丝袜诱惑亚洲看片|