2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/rapps/available.c
5 * PURPOSE: Functions for working with availabled applications
6 * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
13 ShowAvailableAppInfo(INT Index
)
15 PAPPLICATION_INFO Info
= (PAPPLICATION_INFO
) ListViewGetlParam(Index
);
16 WCHAR szText
[MAX_STR_LEN
];
18 if (!Info
) return FALSE
;
20 NewRichEditText(Info
->szName
, CFE_BOLD
);
22 InsertRichEditText(L
"\n", 0);
24 #define ADD_TEXT(a, b, c, d) \
27 LoadStringW(hInst, a, szText, sizeof(szText) / sizeof(WCHAR)); \
28 InsertRichEditText(szText, c); \
29 InsertRichEditText(b, d); \
32 ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0);
33 ADD_TEXT(IDS_AINFO_LICENCE
, Info
->szLicence
, CFE_BOLD
, 0);
34 ADD_TEXT(IDS_AINFO_SIZE
, Info
->szSize
, CFE_BOLD
, 0);
35 ADD_TEXT(IDS_AINFO_URLSITE
, Info
->szUrlSite
, CFE_BOLD
, CFE_LINK
);
36 ADD_TEXT(IDS_AINFO_DESCRIPTION
, Info
->szDesc
, CFE_BOLD
, 0);
42 DeleteCurrentAppsDB(VOID
)
44 HANDLE hFind
= INVALID_HANDLE_VALUE
;
45 WIN32_FIND_DATAW FindFileData
;
46 WCHAR szCabPath
[MAX_PATH
];
47 WCHAR szSearchPath
[MAX_PATH
];
48 WCHAR szPath
[MAX_PATH
];
49 WCHAR szTmp
[MAX_PATH
];
51 if (!GetCurrentDirectoryW(MAX_PATH
, szPath
))
54 swprintf(szCabPath
, L
"%s\\rappmgr.cab", szPath
);
56 if (GetFileAttributesW(szCabPath
) != INVALID_FILE_ATTRIBUTES
)
58 if (!DeleteFileW(szCabPath
))
62 wcscat(szPath
, L
"\\rapps\\");
63 swprintf(szSearchPath
, L
"%s*.txt", szPath
);
65 hFind
= FindFirstFileW(szSearchPath
, &FindFileData
);
66 if (hFind
== INVALID_HANDLE_VALUE
)
71 swprintf(szTmp
, L
"%s%s", szPath
, FindFileData
.cFileName
);
72 if (!DeleteFileW(szTmp
))
78 while (FindNextFileW(hFind
, &FindFileData
) != 0);
89 WCHAR szPath
[MAX_PATH
];
90 WCHAR szAppsPath
[MAX_PATH
];
91 WCHAR szCabPath
[MAX_PATH
];
93 if (!DeleteCurrentAppsDB())
96 DownloadApplicationsDB(APPLICATION_DATEBASE_URL
);
98 if (!GetCurrentDirectoryW(MAX_PATH
, szPath
))
101 swprintf(szCabPath
, L
"%s\\rappmgr.cab", szPath
);
103 wcscat(szPath
, L
"\\rapps\\");
104 wcscpy(szAppsPath
, szPath
);
106 ExtractFilesFromCab(szCabPath
, szAppsPath
);
113 EnumAvailableApplications(INT EnumType
, AVAILENUMPROC lpEnumProc
)
115 HANDLE hFind
= INVALID_HANDLE_VALUE
;
116 WIN32_FIND_DATAW FindFileData
;
117 WCHAR szPath
[MAX_PATH
];
118 WCHAR szAppsPath
[MAX_PATH
];
119 WCHAR szSectionLocale
[MAX_PATH
] = L
"Section.";
120 WCHAR szCabPath
[MAX_PATH
];
121 WCHAR szLocale
[4 + 1];
122 APPLICATION_INFO Info
;
124 if (!GetCurrentDirectoryW(MAX_PATH
, szPath
))
129 swprintf(szCabPath
, L
"%s\\rappmgr.cab", szPath
);
131 wcscat(szPath
, L
"\\rapps\\");
132 wcscpy(szAppsPath
, szPath
);
134 if (!CreateDirectory(szPath
, NULL
) &&
135 GetLastError() != ERROR_ALREADY_EXISTS
)
140 GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_ILANGUAGE
, szLocale
, sizeof(szLocale
) / sizeof(WCHAR
));
141 wcscat(szSectionLocale
, szLocale
);
143 wcscat(szPath
, L
"*.txt");
145 hFind
= FindFirstFileW(szPath
, &FindFileData
);
146 if (hFind
== INVALID_HANDLE_VALUE
)
148 if (GetFileAttributesW(szCabPath
) == INVALID_FILE_ATTRIBUTES
)
149 DownloadApplicationsDB(APPLICATION_DATEBASE_URL
);
151 ExtractFilesFromCab(szCabPath
, szAppsPath
);
152 hFind
= FindFirstFileW(szPath
, &FindFileData
);
153 if (hFind
== INVALID_HANDLE_VALUE
)
157 #define GET_STRING1(a, b) \
158 if (!ParserGetString(szSectionLocale, a, b, MAX_PATH, FindFileData.cFileName)) \
159 if (!ParserGetString(L"Section", a, b, MAX_PATH, FindFileData.cFileName)) \
162 #define GET_STRING2(a, b) \
163 if (!ParserGetString(szSectionLocale, a, b, MAX_PATH, FindFileData.cFileName)) \
164 if (!ParserGetString(L"Section", a, b, MAX_PATH, FindFileData.cFileName)) \
169 Info
.Category
= ParserGetInt(szSectionLocale
, L
"Category", FindFileData
.cFileName
);
170 if (Info
.Category
== -1)
172 Info
.Category
= ParserGetInt(L
"Section", L
"Category", FindFileData
.cFileName
);
173 if (Info
.Category
== -1)
177 if (EnumType
!= Info
.Category
&& EnumType
!= ENUM_ALL_AVAILABLE
) continue;
179 GET_STRING1(L
"Name", Info
.szName
);
180 GET_STRING1(L
"URLDownload", Info
.szUrlDownload
);
182 GET_STRING2(L
"RegName", Info
.szRegName
);
183 GET_STRING2(L
"Version", Info
.szVersion
);
184 GET_STRING2(L
"Licence", Info
.szLicence
);
185 GET_STRING2(L
"Description", Info
.szDesc
);
186 GET_STRING2(L
"Size", Info
.szSize
);
187 GET_STRING2(L
"URLSite", Info
.szUrlSite
);
188 GET_STRING2(L
"CDPath", Info
.szCDPath
);
190 if (!lpEnumProc(Info
)) break;
192 while (FindNextFileW(hFind
, &FindFileData
) != 0);