stdray: (Default)
[personal profile] stdray
Вот такие штуки почему-то всегда работают с первого раза. Хотя наверное за такое надо закапывать.

  1. public static IList<Package> ReadAndWriteAisTickets(string _) {  
  2.     const string xmlExt = "xml";  
  3.     const string zipExt = "zip";  
  4.     using (var pop = new Pop3Client()) {  
  5.         pop.Connect(Settings.Default.MailHost, Settings.Default.MailPop3Port, Settings.Default.MailSsl);  
  6.         pop.Authenticate(Settings.Default.MailUser, Settings.Default.MailPassword);  
  7.         var messageCount = pop.GetMessageCount() + 1;  
  8.         foreach (var i in 1.To(messageCount)) {  
  9.             var message = pop.GetMessage(i);  
  10.             var attachments = message.FindAllAttachments();  
  11.             var xmlFromXml = attachments.Where(a => a.FileName.EndsWith(xmlExt))  
  12.                                         .Select(a => a.GetBodyAsText())  
  13.                                         .TrySelect(XElement.Parse);  
  14.             var xmlFromZip = attachments.Where(a => a.FileName.EndsWith(zipExt))  
  15.                                         .TrySelect(a => ZipFile.Read(new MemoryStream(a.Body)))  
  16.                                         .TrySelectMany(ExtractsFromZip)  
  17.                                         .Select(s => s.ToXElement());  
  18.             var packages = xmlFromXml.Concat(xmlFromZip)  
  19.                                      .TrySelect(e => e.DeserializeFromXml<TransportPackage>())  
  20.                                      .Where(tp => !tp.IsEmpty())  
  21.                                      .Select(tp => tp.ToDbPackage());  
  22.             using (var db = Env.GetDbPackages()) {  
  23.                 db.Connection.Open();  
  24.                 db.Transaction = db.Connection.BeginTransaction();  
  25.                 packages.ForEach(db.WritePackage);  
  26.                 db.SubmitChanges();  
  27.                 try {  
  28.                     pop.DeleteMessage(i);  
  29.                     db.Transaction.Commit();  
  30.                 }  
  31.                 catch { db.Transaction.Rollback(); }  
  32.             }  
  33.         }  
  34.         return new List<Package>();  
  35.     }  
  36. }  

(no subject)

Date: 2012-02-07 05:42 pm (UTC)
From: [identity profile] hls-1141.livejournal.com
а что тут не так?

(no subject)

Date: 2012-02-07 06:04 pm (UTC)
From: [identity profile] stdray.livejournal.com
1) Огромные нечитаемые лямбды, которые "невозможно дебажить".
2) Не экранирована часть методов (смотри всякие pop.BlahBlahBlah() где-то в начале)
3) Не пробрасываются человекопонятные исключения
4) Нет логирования

Но пока мне пофиг. Ф принципе, я эта функция как и ей подобные передается в качетсве аргумента ФВП, которая экранирует и логирует, если чо. Эта байда только на сервере крутится будет, а мне стэктрэйса достаточно, чтобы подебажить.

(no subject)

Date: 2012-02-07 06:09 pm (UTC)
From: [identity profile] stdray.livejournal.com
Олсо, разная мутная еба вроде 1.To(n) или TrySelect(x=>f(x)).

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags