Пример #1
0
        public static string ProposeFileName(this Reference source, FileNameTrimType fileNameTrimType = FileNameTrimType.None)
        {
            if (source == null)
            {
                return(null);
            }

            var renameSettings = source.Project.Engine.Settings.Engine.Settings.Rename;

            // TODO DL: für 5.2 abändern http://tfs2012:8080/tfs/CITAVICollection/Citavi/_workitems/edit/17175
            //var values = renameSettings.NameDefineIds .Select(id => GetValue(source, id)).ToList();
            var values = new List <ReferencePropertyId> {
                ReferencePropertyId.ShortTitle
            }.Select(id => source.GetReferencePropertybyId(id)).ToList();

            values.RemoveAll(v => string.IsNullOrWhiteSpace(v));

            var result = string.Join(renameSettings.Separator.ToStringSeparator(), values);

            if (string.IsNullOrEmpty(result))
            {
                return(null);
            }

            result = Path2.GetValidFileName(result.Clean());

            if (fileNameTrimType != FileNameTrimType.None)
            {
                result = result.Trim(fileNameTrimType, renameSettings.MaxNameLength);
            }

            return(result);
        }
        public static async Task SendByEMailAsync(this Reference reference, MainForm mainForm)
        {
            var mailTemplate        = new MailTemplate();
            var attachmentFileNames = new StringBuilder();

            foreach (var location in reference.Locations.GetAvailable())
            {
                var fileInfo = new FileInfo(location.Address.Resolve().GetLocalPathSafe());
                mailTemplate.Attachments.Add(fileInfo.FullName);
                attachmentFileNames.AppendLine(fileInfo.Name);
            }

            var shortTitle = (string.IsNullOrEmpty(reference.ShortTitle)
                             ? SendReferenceByEmailResources.ShortTitleMissing
                             : reference.ShortTitle).UnciodeToLatin();

            mailTemplate.Subject = "Citavi: " + shortTitle;

            var stringBuilder = new StringBuilder();

            foreach (var c in shortTitle)
            {
                if (c < 32 || c > 254)
                {
                    continue;
                }
                stringBuilder.Append(c);
                if (stringBuilder.Length > 50)
                {
                    break;
                }
            }
            shortTitle = Path2.GetValidFileName(stringBuilder.ToString());
            var risTempFileName = Path.Combine(Path.GetTempPath(), shortTitle + ".ris");
            var risExportDataExchangeProptery = new FileExportDataExchangeProperty
            {
                FileName         = risTempFileName,
                ExportReferences = new List <Reference>()
                {
                    reference
                },
                Transformer = Program.Engine.TransformerManager.GetById(Transformer.RISTransformerId)
            };
            var exporter = new Exporter();
            var success  = false;

            using (var fs = File.OpenWrite(risTempFileName))
            {
                success = await exporter.RunAsync(risExportDataExchangeProptery, fs, CancellationToken.None, null);
            }
            if (!success)
            {
                return;
            }

            mailTemplate.Attachments.Add(risTempFileName);
            attachmentFileNames.AppendLine(Path.GetFileName(risTempFileName));

            mailTemplate.Body = mailTemplate.Attachments.Count > 0
                        ? string.Format(SendReferenceByEmailResources.SendReferenceByEMailBodyText_WithAttachments, reference.Project.Name, reference.ToString(TextFormat.Text), attachmentFileNames.ToString())
                        : string.Format(SendReferenceByEmailResources.SendReferenceByEMailBodyText, reference.Project.Name, reference.ToString(TextFormat.Text));

            try
            {
                Outlook.Send(mailTemplate);
            }
            catch (System.Runtime.InteropServices.COMException)
            {
                MessageBox.Show(mainForm, SendReferenceByEmailResources.OutlookRightsMessage, mainForm.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }