![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вот такие штуки почему-то всегда работают с первого раза. Хотя наверное за такое надо закапывать.
- public static IList<Package> ReadAndWriteAisTickets(string _) {
- const string xmlExt = "xml";
- const string zipExt = "zip";
- using (var pop = new Pop3Client()) {
- pop.Connect(Settings.Default.MailHost, Settings.Default.MailPop3Port, Settings.Default.MailSsl);
- pop.Authenticate(Settings.Default.MailUser, Settings.Default.MailPassword);
- var messageCount = pop.GetMessageCount() + 1;
- foreach (var i in 1.To(messageCount)) {
- var message = pop.GetMessage(i);
- var attachments = message.FindAllAttachments();
- var xmlFromXml = attachments.Where(a => a.FileName.EndsWith(xmlExt))
- .Select(a => a.GetBodyAsText())
- .TrySelect(XElement.Parse);
- var xmlFromZip = attachments.Where(a => a.FileName.EndsWith(zipExt))
- .TrySelect(a => ZipFile.Read(new MemoryStream(a.Body)))
- .TrySelectMany(ExtractsFromZip)
- .Select(s => s.ToXElement());
- var packages = xmlFromXml.Concat(xmlFromZip)
- .TrySelect(e => e.DeserializeFromXml<TransportPackage>())
- .Where(tp => !tp.IsEmpty())
- .Select(tp => tp.ToDbPackage());
- using (var db = Env.GetDbPackages()) {
- db.Connection.Open();
- db.Transaction = db.Connection.BeginTransaction();
- packages.ForEach(db.WritePackage);
- db.SubmitChanges();
- try {
- pop.DeleteMessage(i);
- db.Transaction.Commit();
- }
- catch { db.Transaction.Rollback(); }
- }
- }
- return new List<Package>();
- }
- }
(no subject)
Date: 2012-02-07 05:42 pm (UTC)(no subject)
Date: 2012-02-07 06:04 pm (UTC)2) Не экранирована часть методов (смотри всякие pop.BlahBlahBlah() где-то в начале)
3) Не пробрасываются человекопонятные исключения
4) Нет логирования
Но пока мне пофиг. Ф принципе, я эта функция как и ей подобные передается в качетсве аргумента ФВП, которая экранирует и логирует, если чо. Эта байда только на сервере крутится будет, а мне стэктрэйса достаточно, чтобы подебажить.
(no subject)
Date: 2012-02-07 06:09 pm (UTC)