예제 #1
0
        private void ExcludeFiles(IResource folder)
        {
            try
            {
                ResourceProxy proxy = new ResourceProxy(folder);
                proxy.BeginUpdate();
                proxy.DeleteProp(_ftm.propLastModified);
                proxy.SetProp(FileProxy._propFileType, "Folder");
                proxy.EndUpdateAsync();

                string directory = folder.GetPropText(FileProxy._propDirectory);

                foreach (IResource child in folder.GetLinksTo(null, FileProxy._propParentFolder).ValidResources)
                {
                    if (child.Type != FileProxy._folderResourceType)
                    {
                        if (child.GetPropText(FileProxy._propDirectory) != directory)
                        {
                            new ResourceProxy(child).SetProp(FileProxy._propDirectory, directory);
                        }
                        // do not delete permanent resource linked with any other resource, not only parent folder
                        if (child.GetLinkTypeIds().Length == 1)
                        {
                            DeleteResource(child);
                        }
                    }
                }
                FileProxy.UpdateFoldersTreePane(folder);
            }
            catch (InvalidResourceIdException) {}
            catch (ResourceDeletedException) {}
        }
예제 #2
0
파일: MAPIFolder.cs 프로젝트: mo5h/omeo
        public static void RemoveFromSync(IResource contact, string newEntryID)
        {
            ResourceProxy proxy = new ResourceProxy(contact);

            proxy.BeginUpdate();
            proxy.SetProp(PROP.EntryID, newEntryID);
            proxy.SetProp("UserCreated", true);
            proxy.EndUpdateAsync();
        }
예제 #3
0
        protected override void SetArticleNumbersRange(ref int firstArticle, ref int lastArticle)
        {
            int headersCount2Get   = GetHeadersCount();
            int currentLastArticle = _group.LastArticle;

            // first time last article is not set
            if (currentLastArticle == 0)
            {
                currentLastArticle = lastArticle - headersCount2Get;
                if (currentLastArticle < firstArticle - 1)
                {
                    currentLastArticle = firstArticle - 1;
                }
            }
            else
            {
                if (firstArticle > currentLastArticle)
                {
                    currentLastArticle = firstArticle - 1;
                }
                else if (_group.FirstArticle > lastArticle)
                {
                    ResourceProxy proxy = new ResourceProxy(_group.Resource);
                    proxy.BeginUpdate();
                    try
                    {
                        proxy.DeleteProp(NntpPlugin._propFirstArticle);
                        proxy.DeleteProp(NntpPlugin._propLastArticle);
                    }
                    finally
                    {
                        proxy.EndUpdateAsync();
                    }
                }
            }
            if (headersCount2Get < lastArticle - currentLastArticle)
            {
                lastArticle  = currentLastArticle + headersCount2Get;
                firstArticle = currentLastArticle + 1;
            }
            else
            {
                headersCount2Get = lastArticle - currentLastArticle;
                if (headersCount2Get <= 0)
                {
                    lastArticle = 0;
                }
                else
                {
                    firstArticle = currentLastArticle + 1;
                }
            }
        }
예제 #4
0
파일: MAPIFolder.cs 프로젝트: mo5h/omeo
        public static void RemoveFromSync(IResource contact, bool removeEntryID)
        {
            ResourceProxy proxy = new ResourceProxy(contact);

            proxy.AsyncPriority = JobPriority.Immediate;
            proxy.BeginUpdate();
            if (removeEntryID)
            {
                proxy.DeleteProp(PROP.EntryID);
            }
            proxy.SetProp("UserCreated", true);
            proxy.EndUpdateAsync();
        }
예제 #5
0
        public void Sync(RemoteField itemJira)
        {
            ResourceProxy proxy = new ResourceProxy(Resource, AsyncPriority);

            proxy.BeginUpdate();
            proxy.SetProp(Core.Props.Name, itemJira.name);
            if (Async)
            {
                proxy.EndUpdateAsync();
            }
            else
            {
                proxy.EndUpdate();
            }
        }
예제 #6
0
        protected override void Execute()
        {
            if (_resource.Id != -1 && _resource.GetIntProp(Props.EnclosureDownloadingState) != DownloadState.NotDownloaded)
            {
                // Determine if we want update some of the resource properties (create proxy for that)
                int  nTotalLength  = GetLength();
                bool bUpdateState  = _resource.GetIntProp(Props.EnclosureDownloadingState) != DownloadState.InProgress;
                bool bUpdateLength = ((nTotalLength > 0) && (nTotalLength != _resource.GetIntProp(Props.EnclosureSize)));
                if ((bUpdateState) || (bUpdateLength))
                {
                    ResourceProxy proxy = new ResourceProxy(_resource);
                    proxy.BeginUpdate();
                    if (bUpdateState)
                    {
                        proxy.SetProp(Props.EnclosureDownloadingState, DownloadState.InProgress);
                    }
                    if (bUpdateLength)
                    {
                        proxy.SetProp(Props.EnclosureSize, nTotalLength + _startPosition);
                    }
                    proxy.EndUpdateAsync();
                }

                // Check if the downloaded size should be updated
                // As we take the actual size from the disc file, not from the property, its accuracy is not needed; overwrite the property only if the percent value changes, as it's used only for the percentage display
                if (nTotalLength > 0)                                                                                                                     // The total-size info is available (if it's not, we do not have the percentage anyway)
                {
                    int nSize    = GetDownloadedSize();                                                                                                   // Size we've downloaded
                    int nOldSize = _resource.GetIntProp(Props.EnclosureDownloadedSize);                                                                   // The prev size property value
                    if ((nSize * 100 / nTotalLength) != (nOldSize * 100 / nTotalLength))                                                                  // Percentage has changed, should write a new value
                    {
                        Core.UserInterfaceAP.QueueJob("Update Enclosure Downloaded Size", new UpdateDownloadedSizeDelegate(UpdateDownloadedSize), nSize); // Schedulle to the UI AP so that it merges the too-frequent updates for enclosures that download too fast, that reduces flicker
                    }
                }

                // Do the download step
                base.Execute();
            }
            else
            {
                InvokeAfterWait(null, null);
                new ResourceProxy(_resource).SetProp(Props.EnclosureDownloadingState, DownloadState.NotDownloaded);
                _queued = false;
                EnclosureDownloadManager.DownloadNextEnclosure();
            }
        }
예제 #7
0
파일: JiraUser.cs 프로젝트: mo5h/omeo
        public void Sync(RemoteUser itemJira)
        {
            ResourceProxy proxy = new ResourceProxy(Resource, AsyncPriority);

            proxy.BeginUpdate();
            proxy.SetProp(Core.Props.Name, itemJira.name);
            proxy.SetProp(Props.FullName, itemJira.fullname);
            proxy.SetProp(Props.Email, itemJira.email);
            if (Async)
            {
                proxy.EndUpdateAsync();
            }
            else
            {
                proxy.EndUpdate();
            }
        }
예제 #8
0
파일: JiraStatus.cs 프로젝트: mo5h/omeo
        public void Sync(RemoteStatus itemJira)
        {
            ResourceProxy proxy = new ResourceProxy(Resource, AsyncPriority);

            proxy.BeginUpdate();
            proxy.SetProp(Core.Props.Name, itemJira.name);
            proxy.SetProp(Core.Props.LongBody, itemJira.description);
            proxy.SetProp(Props.IconUri, itemJira.icon);
            if (Async)
            {
                proxy.EndUpdateAsync();
            }
            else
            {
                proxy.EndUpdate();
            }
        }
예제 #9
0
        private void UpdateAttachments()
        {
            _tracer.Trace("prepare UpdateAttachments");

            IResourceList attachments = Core.ResourceStore.FindResourcesWithProp(null, PROP.AttachmentIndex);
            int           count       = attachments.Count;
            int           processed   = 0;

            UpdateProgress(processed, count);
            int ticks = System.Environment.TickCount;

            foreach (IResource attach in attachments.ValidResources)
            {
                try
                {
                    IEAttach attachment = new OutlookAttachment(attach).OpenAttach();
                    if (attachment == null)
                    {
                        continue;
                    }
                    using ( attachment )
                    {
                        string        contentID    = attachment.GetStringProp(MAPIConst.PR_ATTACH_CONTENT_ID);
                        int           attachNum    = attachment.GetLongProp(MAPIConst.PR_ATTACH_NUM);
                        int           attachMethod = attachment.GetLongProp(MAPIConst.PR_ATTACH_METHOD);
                        ResourceProxy resAttach    = new ResourceProxy(attach);
                        resAttach.BeginUpdate();
                        resAttach.SetProp(CommonProps.ContentId, contentID);
                        resAttach.SetProp(PROP.PR_ATTACH_NUM, attachNum);
                        resAttach.SetProp(PROP.AttachMethod, attachMethod);
                        resAttach.EndUpdateAsync();
                    }
                }
                catch
                {}
                ++processed;
                if (System.Environment.TickCount - ticks > 250)
                {
                    ticks = System.Environment.TickCount;
                    UpdateProgress(processed, count);
                }
            }
        }
예제 #10
0
        public override void Save()
        {
            ResourceProxy proxy = new ResourceProxy(_fragment);

            proxy.BeginUpdate();
            proxy.SetProp(Core.Props.Subject, _edtName.Text);
            if (_edtAnnotation.Text.Trim().Length > 0)
            {
                proxy.SetProp(Core.Props.Annotation, _edtAnnotation.Text);
            }
            else
            {
                proxy.DeleteProp(Core.Props.Annotation);
            }
            proxy.EndUpdateAsync();

            // Save size
            Core.SettingStore.WriteInt("Clippings", "AnnotationEditWindowHeight", _panelAnnotation.Height);
            Core.SettingStore.WriteBool("Clippings", "OpenAfterSave", _chkOpenAfterSave.Checked);
        }
예제 #11
0
파일: EmailBlock.cs 프로젝트: mo5h/omeo
        public void Save(IResource contact)
        {
            ResourceProxy proxy = new ResourceProxy(contact);

            proxy.BeginUpdate();
            try
            {
                proxy.AsyncPriority = JobPriority.Immediate;
                for (int i = 0; i < _emailsList.Items.Count; ++i)
                {
                    ListViewItem item    = _emailsList.Items[i];
                    IResource    account = (IResource)Core.ResourceAP.RunUniqueJob(
                        new FindOrCreateEmailAccountDelegate(Core.ContactManager.FindOrCreateEmailAccount), item.Text);
                    proxy.AddLink(Core.ContactManager.Props.LinkEmailAcct, account);
                    _originalAccounts.Remove(item.Text);
                    if (item.SubItems[1].Text == DefltMarker)
                    {
                        proxy.SetProp(ContactManager._propDefaultAccount, account);
                    }
                    new ResourceProxy(account).SetProp(Core.ContactManager.Props.PersonalAccount, _isStartupMode || item.Checked);
                }

                //  Delete links to those accounts which were originally
                //  connected to the contact and did not keep their place in
                //  the list (were removed or renamed).
                foreach (HashSet.Entry e in _originalAccounts)
                {
                    IResource accnt = Core.ResourceStore.FindUniqueResource(
                        "EmailAccount", Core.ContactManager.Props.EmailAddress, e.Key);
                    if (accnt != null)
                    {
                        Core.ResourceAP.RunUniqueJob(new SplitDelegate(HardRemoveAccountFromContact), accnt, contact);
                    }
                }
            }
            finally
            {
                proxy.EndUpdateAsync();
            }
        }
예제 #12
0
        public void Sync(RemoteProject projectJira)
        {
            // Sync the project itself
            ResourceProxy proxy = new ResourceProxy(Resource, AsyncPriority);

            proxy.BeginUpdate();
            proxy.SetProp(Props.Key, projectJira.key);
            proxy.SetProp(Core.Props.LongBody, projectJira.description);
            proxy.SetProp(Core.Props.Name, projectJira.name);
            proxy.SetProp(Props.ProjectUri, projectJira.projectUrl);
            proxy.SetProp(Props.Uri, projectJira.url);
            if (Async)
            {
                proxy.EndUpdateAsync();
            }
            else
            {
                proxy.EndUpdate();
            }

            // Sync the components
            SyncComponents();
        }
예제 #13
0
        private void EnumerateFiles(IResource folder)
        {
            try
            {
                DateTime   lastUpdated = folder.GetDateProp(_ftm.propLastModified);
                string     directory   = folder.GetPropText(FileProxy._propDirectory);
                FileInfo[] fileInfos   = IOTools.GetFiles(directory);

                if (fileInfos != null)
                {
                    DateTime updated   = DateTime.Now;
                    HashMap  fileNames = null;

                    /**
                     * at first create missing resources
                     */
                    if (fileInfos.Length > 0)
                    {
                        fileNames = new HashMap(fileInfos.Length / 2);
                        foreach (FileInfo fileInfo in fileInfos)
                        {
                            fileNames[IOTools.GetName(fileInfo)] = fileInfo;
                            if (IOTools.GetLastWriteTime(fileInfo) > lastUpdated &&
                                (_indexHidden || (IOTools.GetAttributes(fileInfo) & FileAttributes.Hidden) == 0))
                            {
                                FindOrCreateFile(fileInfo, false);
                            }
                        }
                    }

                    /**
                     * then remove obsolete resources
                     */
                    foreach (IResource child in folder.GetLinksTo(null, FileProxy._propParentFolder).ValidResources)
                    {
                        if (child.Type == FileProxy._folderResourceType)
                        {
                            if (!Directory.Exists(child.GetPropText(FileProxy._propDirectory)))
                            {
                                DeleteResource(child);
                            }
                        }
                        else
                        {
                            if (child.GetPropText(FileProxy._propDirectory) != directory)
                            {
                                new ResourceProxy(child).SetProp(FileProxy._propDirectory, directory);
                            }
                            string        name = child.GetPropText(Core.Props.Name);
                            HashMap.Entry E    = (fileNames == null) ? null : fileNames.GetEntry(name);

                            /**
                             * check if file exists
                             */
                            if (E == null)
                            {
                                DeleteResource(child);
                            }
                            else
                            {
                                /**
                                 * if exists, check its atributes
                                 */
                                FileInfo fileInfo = (FileInfo)E.Value;
                                if (fileInfo == null ||
                                    (!_indexHidden && (IOTools.GetAttributes(fileInfo) & FileAttributes.Hidden) != 0))
                                {
                                    DeleteResource(child);
                                }
                            }
                        }
                    }

                    ResourceProxy proxy = new ResourceProxy(folder);
                    proxy.BeginUpdate();
                    proxy.SetProp(_ftm.propLastModified, updated);
                    proxy.SetProp(FileProxy._propFileType, "Folder");
                    proxy.EndUpdateAsync();
                    FileProxy.UpdateFoldersTreePane(folder);
                }
            }
            catch (InvalidResourceIdException) {}
            catch (ResourceDeletedException) {}
        }