コード例 #1
0
ファイル: ListStorage.cs プロジェクト: a1lic/Mystique
        private static AccountInfo GetSuitableAccount(string screenName, string listName)
        {
            var acInfo = AccountStorage.Get(screenName);

            if (acInfo == null)
            {
                acInfo = AccountStorage.GetRandom(ai => ai.IsFollowingList(screenName, listName), true);
            }
            return(acInfo);
        }
コード例 #2
0
ファイル: UserStorage.cs プロジェクト: a1lic/Mystique
        private static UserViewModel DownloadUser(string userScreenName)
        {
            ManualResetEvent mre;

            lock (semaphoreAccessLocker)
            {
                if (!strSemaphores.TryGetValue(userScreenName, out mre))
                {
                    strSemaphores.Add(userScreenName, new ManualResetEvent(false));
                }
            }
            if (mre != null)
            {
                mre.WaitOne();
                return(Get(userScreenName));
            }
            try
            {
                var acc = AccountStorage.GetRandom(ai => true, true);
                if (acc != null)
                {
                    try
                    {
                        var ud = acc.GetUserByScreenName(userScreenName);
                        if (ud != null)
                        {
                            var uvm = new UserViewModel(ud);
                            using (lockWrap.GetWriterLock())
                            {
                                if (dictionary.ContainsKey(ud.NumericId))
                                {
                                    dictionary[ud.NumericId] = uvm;
                                }
                                else
                                {
                                    dictionary.Add(ud.NumericId, uvm);
                                }
                            }
                            return(uvm);
                        }
                    }
                    catch (Exception e)
                    {
                        ExceptionStorage.Register(e, ExceptionCategory.TwitterError, "ユーザー情報の受信に失敗しました。(ユーザー @" + userScreenName + " を アカウント @" + acc.ScreenName + " で受信しようとしました。)");
                    }
                    return(null);
                }
                else
                {
                    return(null);
                }
            }
            finally
            {
                lock (semaphoreAccessLocker)
                {
                    if (strSemaphores.ContainsKey(userScreenName))
                    {
                        strSemaphores[userScreenName].Set();
                        strSemaphores.Remove(userScreenName);
                    }
                }
            }
        }