00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "stdafx.h"
00023 #include <io.h>
00024 #include "TextFile.h"
00025 #include "GFN.h"
00026
00027 TCHAR* exttypestr[] =
00028 {
00029 _T("srt"), _T("sub"), _T("smi"), _T("psb"),
00030 _T("ssa"), _T("ass"), _T("idx"), _T("usf"),
00031 _T("xss"), _T("txt")
00032 };
00033
00034 static TCHAR* ext[2][countof(exttypestr)] =
00035 {
00036 {
00037 _T(".srt"), _T(".sub"), _T(".smi"), _T(".psb"),
00038 _T(".ssa"), _T(".ass"), _T(".idx"), _T(".usf"),
00039 _T(".xss"), _T(".txt")
00040 },
00041 {
00042 _T(".*.srt"), _T(".*.sub"), _T(".*.smi"), _T(".*.psb"),
00043 _T(".*.ssa"), _T(".*.ass"), _T(".*.dummyidx"), _T(".*.usf"),
00044 _T(".*.xss"), _T(".*.txt")
00045 },
00046 };
00047
00048 #define WEBSUBEXT _T(".wse")
00049
00050 static int SubFileCompare(const void* elem1, const void* elem2)
00051 {
00052 return(((SubFile*)elem1)->fn.CompareNoCase(((SubFile*)elem2)->fn));
00053 }
00054
00055 void GetSubFileNames(CString fn, CStringArray& paths, SubFiles& ret)
00056 {
00057 ret.RemoveAll();
00058
00059 int extlistnum = countof(ext);
00060 int extsubnum = countof(ext[0]);
00061
00062 fn.Replace('\\', '/');
00063
00064 bool fWeb = false;
00065 {
00066
00067 int i = fn.Find(_T("http://"));
00068 if(i > 0) {fn = _T("http") + fn.Mid(i); fWeb = true;}
00069 }
00070
00071 int l = fn.GetLength(), l2 = l;
00072 l2 = fn.ReverseFind('.');
00073 l = fn.ReverseFind('/') + 1;
00074 if(l2 < l) l2 = l;
00075
00076 CString orgpath = fn.Left(l);
00077 CString title = fn.Mid(l, l2-l);
00078 CString filename = title + _T(".nooneexpectsthespanishinquisition");
00079
00080 if(!fWeb)
00081 {
00082 struct _tfinddata_t file, file2;
00083 long hFile, hFile2 = 0;
00084
00085 for(int k = 0; k < paths.GetSize(); k++)
00086 {
00087 CString path = paths[k];
00088 path.Replace('\\', '/');
00089
00090 l = path.GetLength();
00091 if(l > 0 && path[l-1] != '/') path += '/';
00092
00093 if(path.Find(':') == -1 && path.Find(_T("\\\\")) != 0) path = orgpath + path;
00094
00095 path.Replace(_T("/./"), _T("/"));
00096 path.Replace('/', '\\');
00097
00098 {
00099 CList<CString> sl;
00100
00101 bool fEmpty = true;
00102
00103 if((hFile = _tfindfirst((LPTSTR)(LPCTSTR)(path + title + "*"), &file)) != -1L)
00104 {
00105 do
00106 {
00107 if(filename.CompareNoCase(file.name))
00108 {
00109 fEmpty = false;
00110
00111 }
00112 }
00113 while(_tfindnext(hFile, &file) != -1);
00114 _findclose(hFile);
00115 }
00116
00117
00118 if(fEmpty) continue;
00119 }
00120
00121 for(int j = 0; j < extlistnum; j++)
00122 {
00123 for(int i = 0; i < extsubnum; i++)
00124 {
00125 CString fn2 = path + title + ext[j][i];
00126
00127 if((hFile = _tfindfirst((LPTSTR)(LPCTSTR)fn2, &file)) != -1L)
00128 {
00129 do
00130 {
00131 CString fn = path + file.name;
00132
00133 hFile2 = -1;
00134 if(j == 0 || (hFile2 = _tfindfirst((LPTSTR)(LPCTSTR)(fn.Left(fn.ReverseFind('.')) + _T(".avi")), &file2)) == -1L)
00135 {
00136 SubFile f;
00137 f.fn = fn;
00138 ret.Add(f);
00139 }
00140
00141 if(hFile2 >= 0) _findclose(hFile2);
00142 }
00143 while(_tfindnext(hFile, &file) != -1);
00144
00145 _findclose(hFile);
00146 }
00147 }
00148 }
00149 }
00150 }
00151 else if(l > 7)
00152 {
00153 CWebTextFile wtf;
00154 if(wtf.Open(orgpath + title + WEBSUBEXT))
00155 {
00156 CString fn;
00157 while(wtf.ReadString(fn) && fn.Find(_T("://")) >= 0)
00158 {
00159 SubFile f;
00160 f.fn = fn;
00161 ret.Add(f);
00162 }
00163 }
00164 }
00165
00166
00167
00168 qsort(ret.GetData(), ret.GetSize(), sizeof(SubFile), SubFileCompare);
00169 }