Chrome ব্রাউজার বিজ্ঞপ্তি ইতিহাস দেখার কোনও উপায় আছে?


55

আমি বেশ কয়েকটি ওয়েবসাইট থেকে ক্রোম বিজ্ঞপ্তি পেয়েছি এবং যখন সেগুলিগুলির জন্য আমার কাছে কোনও ট্যাব খোলা না থাকে তখন তারা কাজ করে।

তবে কখনও কখনও আমি যখন আমার ডেস্কে না থাকি বা আমার ল্যাপটপের দিকে না থাকি তখন এই ক্রোম বিজ্ঞপ্তিগুলি পাই।

যেহেতু এই বিজ্ঞপ্তিগুলির কয়েকটি আমার পক্ষে কার্যকর, আমি যেটি মিস করেছি তা অ্যাক্সেস করতে সক্ষম হতে চাই।

বিজ্ঞপ্তি ইতিহাস দেখার কোনও উপায় আছে কি?


1
মনে হচ্ছে না। এই পোস্টটি ( theverge.com/2015/10/14/9531133/… ) দেখে, তারা তাদের বিজ্ঞপ্তি নীতিটি পুনরায় সাজিয়েছে এবং পৃথক ওয়েবপৃষ্ঠাগুলিতে রাখার জন্য এটি ডেস্কটপ থেকে অপসারণ করে। নতুন বিজ্ঞপ্তিগুলি অ্যাক্সেস করার একমাত্র জিনিস হ'ল গুগল পৃষ্ঠায় বেলটি ক্লিক করা।
টেরি

1
নোপের মতো দেখে মনে হচ্ছে: productforums.google.com/forum/#!msg/chrome/xs9PflHTfho/… - খুব দুর্ভাগ্য।
এলবি--

একটি তালিকা হিসাবে আমি বিজ্ঞপ্তিগুলি খুঁজে পেয়েছি কেবল সেই জায়গাটি যদি তাদের ওয়েবসাইটের মাধ্যমে চালিত ওয়েবসাইটটি তাদের ওয়েবসাইটের মাধ্যমে করে। ক্রোম তাদের এ জাতীয় কিছু সংগ্রহ করতে দেখা যায় না chrome://notificationsএবং তারা এটি ওএসে তৈরি করে না।
জেসন লিডন

@Paradroid এর বৈধ উত্তরটি গ্রহণ করুন
সতীশ

উত্তর:


31

আপনার যদি ম্যাক থাকে তবে উপায় আছে! 😄

বিজ্ঞপ্তিগুলির তালিকাটি দেখতে কেমন হবে তা এখানে:

বিজ্ঞপ্তিগুলির তালিকাটি দেখতে কেমন হবে তা এখানে।

আপনাকে যা করতে হবে তা হ'ল:

1. ক্রোমে, এখানে যান:

chrome://flags/

2. দেখুন:

Enable native notifications. Mac

3. এটি সক্ষম করুন, ক্রোম পুনরায় চালু করুন, আপনি শেষ করেছেন। উপভোগ করুন!

সম্পাদনা করুন:

  • আপনার উপরের আর করার দরকার নেই।

ক্রোম 59-এ শুরু করে, বিজ্ঞপ্তিগুলি API বা Chrome এর মাধ্যমে প্রেরিত বিজ্ঞপ্তিগুলি ক্রোমের নিজস্ব সিস্টেমের পরিবর্তে সরাসরি ম্যাকস নেটিভ নোটিফিকেশন সিস্টেম দ্বারা প্রদর্শিত হবে not [ উত্স ]


2
এটি বিজ্ঞপ্তি ইতিহাস দেখার প্রশ্নের উত্তর দেয় না, কেবল বিজ্ঞপ্তিগুলি দেখে।
বেজর্ন

6
@ জর্জন টিপলিং এটির উত্তর দেয়। তিনি জিজ্ঞাসা করছেন যে তিনি দূরে থাকাকালীন যে বিজ্ঞপ্তিগুলি মিস করেছেন তা দেখতে পান এবং আমার পদ্ধতিটি ঠিক সেভাবে করে।
এসড্রাস লোপেজ

1
আপনি যদি লিঙ্কগুলিকে মন্তব্য হিসাবে রাখেন তবে আমি এগুলি আপনার পোস্টে আপনার জন্য যুক্ত করব, @ এসড্রাসলোপেজ
ব্যবহারকারী418150

1
@ user418150 আমি এটির প্রশংসা করি তবে এখন আমি সুনাম পেলাম। :) সম্পাদনাগুলি পরীক্ষা করুন।
এসড্রাস লোপেজ

2
প্রধান সমস্যা এখানে যে এটি শুধুমাত্র প্রজ্ঞাপন সঞ্চয় করে যদি তুমি না এটা এ ক্লিক করুন। আমি বেশ কয়েকবার একটি আকর্ষণীয় নিবন্ধ শিরোনামে ক্লিক করেছি, কেবল এটি লোড করতে ব্যর্থ হয়েছে, তবে এটি এখনও বিজ্ঞপ্তি তালিকা থেকে সরিয়ে ফেলা হয়েছে। সাধারণত নিবন্ধগুলি গুগল করা খুব নতুন এবং প্রায়শই বিজ্ঞপ্তির শিরোনাম নিবন্ধ শিরোনামের সাথে মেলে না, তাই এটি ওয়েবের অন্ত্রের মধ্যে হারিয়ে যায়।
iBorg

11

ম্যাকোএসএক্স-এ আপনার লাইব্রেরি / অ্যাপ্লিকেশন সহায়তাতে Chrome ডিরেক্টরি থাকবে located টার্মিনাল অ্যাপ্লিকেশনটি খুলুন এবং পরবর্তী কমান্ডগুলি চালনা করুন:

cd ~/Library/Application\ Support/Google/Chrome/Default/Platform\ Notifications/
ls -la

এখন আপনি ফাইলগুলি দেখতে পাবেন:

drwx------@  7 visi  staff   224 Jul 13 18:16 .
drwx------  75 visi  staff  2400 Jul 15 11:05 ..
-rw-------@  1 visi  staff   759 Jul 15 10:57 000003.log
-rw-------@  1 visi  staff    16 Jul 13 18:16 CURRENT
-rw-------@  1 visi  staff     0 Jul 13 18:16 LOCK
-rw-------@  1 visi  staff   147 Jul 13 18:16 LOG
-rw-------@  1 visi  staff    41 Jul 13 18:16 MANIFEST-000001

আপনি সর্বাধিক সাম্প্রতিক একটি 000003.log দেখতে পারেন, তাই এটি পরবর্তী কমান্ড দ্বারা পরীক্ষা করুন:

tail -n 100 000003.log

এবং আপনি এই লগ থেকে শেষ 100 আইটেম দেখতে পাবেন। তারপরে আপনি ক্রোম সেটিংস খুলতে পারেন এবং সেই ওয়েবসাইট বিজ্ঞপ্তিটি অক্ষম করতে পারেন।

মনে রাখবেন যে ক্রোমে আপনার বেশ কয়েকটি প্রোফাইল থাকলে আপনার পথটি আলাদা হতে পারে (ডিফল্টের পরিবর্তে প্রোফাইল 1):

cd ~/Library/Application\ Support/Google/Chrome/Profile\ 1/Platform\ Notifications/

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। :)
কোডি এ। রে

1
2019 এ এখনও কাজ করছে (যদিও লগের একটু ব্যাখ্যা করার প্রয়োজন আছে)। দুর্দান্ত উত্তরের ধন্যবাদ
carpii

11

আপনি যদি যান %LocalAppData%\Google\Chrome\User Data\Default\Platform Notificationsতবে অতীত বিজ্ঞপ্তিগুলির লগ ফাইল রয়েছে।


4
ভাল, তবে হার্ডকোডের পরিবর্তে "% লোকাল অ্যাপডেটা% \ গুগল \ ক্রোম \ ব্যবহারকারীর ডেটা \ ডিফল্ট \ প্ল্যাটফর্ম বিজ্ঞপ্তি" হিসাবে চিহ্নিত করার পথটিকে বিবেচনা করুন। এটি যে কোনও পিসিতে পুরোপুরি কাজ করে।
দিমিত্রি গুসরভ

ইউজারডাটা /-ফোল্ডারে আপনাকে প্রথমে আপনার প্রোফাইল ফোল্ডারটি সনাক্ত করতে হতে পারে, যেমন "সি: \ ব্যবহারকারীদের ব্যবহারকারীর নাম \ অ্যাপডাটা \ স্থানীয় \ গুগল \ ক্রোম \ ব্যবহারকারীর ডেটা \ প্রোফাইল 1 \ প্ল্যাটফর্ম বিজ্ঞপ্তি"
মাফেলু

1
এই তথ্য বাইনারি হয়। এটা কীভাবে পড়ব?
গায়া

ক্রোম 71 এ, এবং লগ ফাইলটি খালি। এটি কি কোনও পর্যায়ে অক্ষম হয়ে গেছে?
জেমস

2
@ গাইয়া আমি একই জিনিসটি অবাক করেছিলাম এবং স্রেফ এমন কিছু ক্রেপী জাভা কোড বেত্রাঘাত করেছি যা এর বেশিরভাগের সিদ্ধান্ত নেওয়ার ক্ষেত্রে গ্রহণযোগ্য কাজ করে। আমি এটি নীচে পোস্ট করেছি: superuser.com/a/1410742/778383
ড্রিমস্পেসের রাষ্ট্রপতি

3

যেহেতু সরাসরি বিজ্ঞপ্তিগুলির রেকর্ড পাওয়া সম্ভব নয়, আমার যদি একই সমস্যা হয়, তবে আমি একজন অ্যান্ড্রয়েড ফোন এমুলেটর বা একটি ফোন ব্যবহার করে পুশবলেটকে সুপারিশকারী হিসাবে ব্যবহার করে প্রতারণা করব। তবে কেবল পুশবুলেটই নয়, অন্যান্য প্রচুর অ্যাপ রয়েছে, আমরা একটি পৃথক থ্রেডে বিজ্ঞপ্তিগুলি শুনতে এবং রেকর্ড করার জন্য অ্যান্ড্রয়েড কৌশলগুলি আলোচনা করতে পারি।

আপনি যদি একজন প্রোগ্রামার হন তবে আপনি সম্ভবত ঘরে বসে এক্সটেনশন থাকা সত্ত্বেও আপনার সমস্যাটি সমাধান করতে পারেন:

https://stackoverflow.com/questions/15949606/how-can-i-listen-to-notifications

"আপনি ওয়েবকিট নোটিকেশনস ক্রিয়েটনোটিকেশন ফাংশনটি হুক করতে পারেন যাতে যখনই কোনও বিজ্ঞপ্তি তৈরি হয় আপনি কোনও নির্দিষ্ট কোড চালান।"


2

আপনি পুশ বিজ্ঞপ্তিগুলির ইতিহাস দেখতে পারেন। টাস্কবারে আপনার পিসি স্ক্রিনের একেবারে নীচে ডান কোণে যা স্পিচ বুদ্বুদের মতো দেখাচ্ছে এবং আপনি যদি এটি ঘুরে দেখেন তবে দেখতে পাবেন এটি আসলে "বিজ্ঞপ্তি" বলে called আপনি যদি সেই বুদ্বুদটিকে ক্লিক করেন তবে এটি আপনার অপঠিত / নতুন ইমেলগুলি এবং আপনি বরখাস্ত করেন নি এমন কোনও ধরণের বিজ্ঞপ্তি প্রদর্শন করবে। আমি এই উত্তরটি খুঁজতে এখানে এসেছি এবং এটি খুঁজে পাইনি তবে তারপরে এটি কার্যকর করতে পরিচালিত। আমি উইন্ডোজ 10 ব্যবহার করছি।


হ্যাঁ, এটি উইন 10 এর সাম্প্রতিক বিষয়, তবে এটি উইন্ডোজের সর্বশেষ উত্তর।
প্যারাড্রয়েড

1

উপরে কিছুটা উল্লিখিত এমন কিছু স্পর্শ করা কিন্তু একটি মোচড় দিয়ে যে বীমা করে যে আপনি ওএসএক্সে বিজ্ঞপ্তিটি অনুপস্থিত:

  1. প্রধান শীর্ষ বারের ডানদিকে, বিজ্ঞপ্তি আইকনে ক্লিক করুন।

  2. কোগওয়েল ক্লিক করুন (বিজ্ঞপ্তি প্রদর্শনের নীচে ডানদিকে)

  3. বিজ্ঞপ্তিগুলি কীভাবে প্রদর্শিত হয় সেটআপ করতে Chrome নির্বাচন করুন।

  4. ডিফল্টরূপে "ব্যানার" নির্বাচন করা হয় এবং সেগুলি স্বয়ংক্রিয়ভাবে বিলুপ্ত হতে পারে। পরিবর্তে, "সতর্কতা" প্রকারটি নির্বাচন করুন এবং আপনি যতক্ষণ না তাদের স্বীকৃতি দিচ্ছেন ততক্ষণ তারা সেখানে থাকবে!

আপনি স্বাগত :)


-1

দেখে মনে হচ্ছে পুশবলেট আপনার সমস্যার সমাধান করতে পারে। তাদের দাবি যে আপনি ক্রোম এক্সটেনশন ব্যবহার করে আপনার মিস করা বিজ্ঞপ্তিগুলি দেখতে পাচ্ছেন।

https://blog.pushbullet.com/2014/10/23/easily-access-your-recent-notifications-in-chrome/


নূন্যতম প্রয়োজনীয় তথ্য এবং সুপার ব্যবহারকারীর সফ্টওয়্যারটি কীভাবে সুপারিশ করতে হয় তার পরামর্শগুলির জন্য সফ্টওয়্যারটি কীভাবে সুপারিশ করবেন তা দয়া করে পড়ুন । আপনার উত্তরটি দরকারী রাখতে এমনকি সরবরাহিত লিঙ্ক (গুলি) এই বিশদটি ভাঙ্গলে আপনার উত্তরটিতে সম্পাদনা করা উচিত।
আমি বলছি মনিকা পুনরায় স্থাপন করুন

আরে, দুর্দান্ত। আমি এটি চেষ্টা করব। আমি ইতিমধ্যে পুশবলেট ব্যবহার করেছি তবে এই ক্রোম এক্সটেনশন সম্পর্কে অজানা ছিল।
প্যারাড্রয়েড

এই বৈশিষ্ট্যটি খুঁজে পাওয়া যাবে না বলে মনে হচ্ছে। একটি বিজ্ঞপ্তি পপ হয়েছে এবং বিজ্ঞপ্তির ইতিহাসে এর কোনও সন্ধান পাওয়া যায় নি।
ম্যাডপ্রপস

আমি প্রশ্নটি পুনর্বিবেচনা করেছি এবং ধরাটি এটি। যদি আপনার ফোনটি কোনও বিজ্ঞপ্তি পায়, পুশবলেট এটি আপনার ডেস্কটপে পৌঁছে দেবে এবং আপনাকে সম্ভবত অপঠিত বিজ্ঞপ্তি রয়েছে বলে জানাতে হবে (আপনি এটি আপনার ফোনে দেখে থাকতে পারেন বা আপনার কী আছে)। আপনি কোন সাইটের জন্য ক্রোম বিজ্ঞপ্তি পাচ্ছেন? যদি এর জন্য কোনও অ্যাপ থাকে তবে আপনি সর্বদা এটি ইনস্টল করতে পারেন এবং তারপরে আপনি পুশবলেট থেকে আপনার ডেস্কটপ / ল্যাপটপ / যা কিছুতেই বিজ্ঞপ্তি পাবেন।
সোশ্যালঅরগানিক্স কন্টেন্টব্র্যান্ডম্যাগ্মিট

1
পুশবুলেটে "বিজ্ঞপ্তিগুলি" বৈশিষ্ট্যটি কেবলমাত্র আপনার অ্যান্ড্রয়েড ফোন থেকে ডেস্কটপে বিজ্ঞপ্তিগুলি দেখার জন্য, এবং যদি আপনার কাছে ম্যাক ডেস্কটপ থাকে তবে আইফোনের সাথে একই। এটির ক্রোম বিজ্ঞপ্তিগুলির সাথে কোনও সম্পর্ক নেই।
বোয়াজ

-1

কোরি ধন্যবাদ এর উত্তর উপরে, আর আমার হাত খুব বেশি সময় সঙ্গে একটি অলস শনিবার, আমি এখন দেখতে পাচ্ছি সাম্প্রতিক ক্রোম বিজ্ঞপ্তিগুলি একটি তালিকা আমার আইডিই এর কনসোলে, যেখানে আমি এমনকি URL গুলি ক্লিক করতে পারেন।

কোডটি কৃপণকর এবং বাইনারি ডেটা ব্যাখ্যা করার সঠিক উপায়ের আমার কাছে কোনও হস্তক্ষেপ না থাকায় অশোধিত হিউরিস্টিক্স ব্যবহার করে।

তবে এটি কোনও কিছুর চেয়ে এক টন ভাল। উদাহরণ আউটপুট (অংশ):

https://www.finanzen.net/nachricht/aktien/kw-9-tops-und-flops-der-tecdax-aktien-in-der-vergangenen-woche-7195100
https://images.finanzen.net/mediacenter/unsortiert/TecDAX_boerse_frankfurt0016_kl.jpg
So bewegten sich die Einzelwerte des TecDAX in der zurückliegenden Handelswoche.*
KW 9: Tops und Flops der TecDAX-Aktien in der vergangenen Woche
So bewegten sich die Einzelwerte des TecDAX in der zurückliegenden Handelswoche.
HideOnTheseRoutes
Home/Index;Article/News/Index
tag-7195100
NotificationIdentifier
1061622960{


https://www.youtube.com/watch?v=W-mlD_bYKdU&feature=push-u-sub&attr_tag=0SL8UpnrTOnTECxr%3A6
https://lh5.googleusercontent.com/-raJM5SITO34/AAAAAAAAAAI/AAAAAAAAAAA/UtLljlL4Wpc/s96-c-mo/photo.jpg
New from Market Moves
Trade Recap: $1,500 in PROFITS*˜
COuAyJGY4uACEAY=
attributionTag
0SL8UpnrTOnTECxr:6{
 from Market MovesTrade Recap: $1,500 in PROFITS

ক্রুশবিদ্ধকরণযোগ্য জাভা কোড:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;




/**
 * v[1, 2019-03-02 13:00 UTC]
 *
 * by dreamspace-president.com
 */
final public class CrappyChromeNotificationHistoryReader {


    public static void main(final String[] args) {

        final File file = new File(
                "C:\\Users\\[YOUR_NAME_HERE]\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Platform Notifications\\000003.log");

        final List<ChromeNotificationStuff> notifications = obtainChromeNotificationStuff(file);
        for (ChromeNotificationStuff notification : notifications) {
            System.err.println();
            System.err.println(notification);
        }
        System.exit(0);
    }


    public static List<ChromeNotificationStuff> obtainChromeNotificationStuff(final File file) {

        final List<ChromeNotificationStuff> ret = new ArrayList<>();

        final List<DumbTokenList> listOfDumbTokenLists = doTheInsaneParsingThing(file);
        int instanceCounter = 0;
        for (DumbTokenList dtl : listOfDumbTokenLists) {

            final List<String> urls = new ArrayList<>();
            final List<String> texts = new ArrayList<>();

            for (String token : dtl.tokens) {
                if (token.startsWith("https://") || token.startsWith("http://")) {
                    urls.add(token);
                } else {
                    texts.add(token);
                }
            }


            // Remove unimportant URLs.
            for (int i = urls.size() - 1; i > 0; i--) {
                final String urlThis = urls.get(i);
                final int lenThis = urlThis.length();
                for (int ii = i - 1; ii >= 0; ii--) {
                    final String urlThat = urls.get(ii);
                    final int lenThat = urlThat.length();

                    if (lenThis > lenThat) {
                        if (urlThis.startsWith(urlThat)) {
                            final String removed = urls.remove(ii);
                            //                            System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + urlThis); // because was better or equal
                            break;
                        }
                    } else {
                        if (urlThat.startsWith(urlThis)) {
                            final String removed = urls.remove(i);
                            //                            System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + urlThat); // because was better or equal
                            break;
                        }
                    }

                }
            }

            ret.add(new ChromeNotificationStuff(instanceCounter, urls, texts));
            instanceCounter++;
        }

        ret.sort(null);

        return ret;
    }


    final public static class ChromeNotificationStuff implements Comparable<ChromeNotificationStuff> {


        private final int instanceCounter;
        final public List<String> urls;
        final public List<String> texts;


        private ChromeNotificationStuff(final int instanceCounter,
                                        final List<String> urls,
                                        final List<String> texts) {

            this.instanceCounter = instanceCounter;

            this.urls = Collections.unmodifiableList(urls);
            this.texts = Collections.unmodifiableList(texts);
        }


        public String toString() {

            final StringBuilder sb = new StringBuilder();
            for (String url : urls) {
                sb.append(url).append('\n');
            }
            for (String text : texts) {
                sb.append(text).append('\n');
            }
            return sb.toString();
        }


        @Override
        public int compareTo(final ChromeNotificationStuff o) { // Newest (= last) notifications first, please.

            return Integer.compare(o.instanceCounter, instanceCounter);
        }
    }




    final private static double MIN_LENGTH_DIFFERENCE_RATIO = 0.7;//0.9;
    final private static double MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES = 0.2;




    final private static class DumbTokenList {


        final private static int MIN_LENGTH = 10; //6;
        final private static String[] EXTENSIONS = new String[] { ".jpg", ".jpeg", ".png", ".gif", ".html", ".htm", ".php" };
        final private static int MAX_EXTRA_CRAP_AFTER_EXTENSIONS = 3;
        final private static String SAFE_URL_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;="; // https://stackoverflow.com/a/1547940/3500521

        final private String originalText;
        final private List<String> tokens;


        private DumbTokenList(final String textWithBinaryCrap) {

            originalText = textWithBinaryCrap;

            final List<String> tokens = new ArrayList<>();

            final Consumer<String> addTokenButTryToDecrappifyExtensionsFirstAnTing = token -> {


                if (token.startsWith("ttps://") || token.startsWith("ttp://")) {
                    token = "h" + token;
                }


                final List<String> newTokens = new ArrayList<>();

                if (token.startsWith("http")) {
                    final int tokenLength = token.length();
                    boolean found = false;
                    for (int i = 0; i < tokenLength; i++) {
                        final char c = token.charAt(i);
                        if (SAFE_URL_CHARACTERS.indexOf(c) < 0) {
                            newTokens.add(token.substring(0, i));
                            newTokens.add(token.substring(i));
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        newTokens.add(token);
                    }
                } else {
                    newTokens.add(token);
                }

                for (String newToken : newTokens) {


                    String foundExt = null;
                    int foundExtLen = 0;
                    int foundExtAt = -1;
                    for (String extension : EXTENSIONS) {
                        final int idx = newToken.indexOf(extension);
                        if (idx >= 0) {
                            final int extLen = extension.length();
                            if (idx > foundExtAt || (idx == foundExtAt && extLen > foundExtLen)) {
                                foundExt = extension;
                                foundExtLen = extLen;
                                foundExtAt = idx;
                            }
                        }
                    }
                    if (foundExt != null) {
                        final int amountOfCharactersAfterThisFind = newToken.length() - foundExtAt - foundExtLen;
                        if (amountOfCharactersAfterThisFind <= MAX_EXTRA_CRAP_AFTER_EXTENSIONS) {
                            // OK. Shorten this bitch.
                            newToken = newToken.substring(0, foundExtAt + foundExtLen);
                        }
                    }


                    if (newToken.startsWith("http")) {
                        if (!newToken.startsWith("http://") && !newToken.startsWith("https://")) {
                            continue;
                        }
                    }


                    if (newToken.startsWith("/watch?v=")) {
                        newToken = "https://www.youtube.com" + newToken;
                    }


                    if (newToken.length() >= MIN_LENGTH) {
                        tokens.add(newToken);
                    }


                }

            };

            final StringBuilder sb = new StringBuilder();

            final int len = textWithBinaryCrap.length();
            for (int i = 0; i <= len + 1; i++) {

                final char c = i < len ? textWithBinaryCrap.charAt(i) : 0;

                if (c < ' ' || c == '"') {

                    String potentialText = sb.toString();
                    while (true) {
                        final int httpIDX = potentialText.indexOf("http", 1);
                        if (httpIDX < 0) {
                            addTokenButTryToDecrappifyExtensionsFirstAnTing.accept(potentialText);
                            break;
                        } else {
                            final String snippet = potentialText.substring(0, httpIDX);
                            potentialText = potentialText.substring(httpIDX);
                            addTokenButTryToDecrappifyExtensionsFirstAnTing.accept(snippet);
                        }
                    }

                    sb.setLength(0);

                    if (c == '"') {
                        // Skip this and the next. (thus "i < len +1")
                        i++;
                    }
                } else {
                    sb.append(c);
                }
            }


            // Remove quasi-duplicates. Sue me.
            //            System.err.println("\n*** STARTING DEDUPLICATION ***");
            final int lSize = tokens.size();
            for (int i = lSize - 1; i > 0; i--) { // (not 0 itself, wouldn't make sense)

                if (i < tokens.size()) {

                    final String entry = tokens.get(i);

                    for (int ii = i - 1; ii >= 0; ii--) { // (incl. 0)

                        final String otherEntry = tokens.get(ii);

                        final Boolean removeNoneOrFirstOrSecond = areLinesTooSimilar(entry, otherEntry);
                        if (removeNoneOrFirstOrSecond != null) {

                            if (!removeNoneOrFirstOrSecond) {
                                final String removed = tokens.remove(i);
                                //                                System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + otherEntry); // because was better or equal
                            } else {
                                final String removed = tokens.remove(ii);
                                //                                System.err.println("\nREMOVED: " + removed + "\nKEPT   : " + entry); // because was better or equal
                            }
                            break; // IMPORTANT!
                        }

                    }
                }
            }


            this.tokens = Collections.unmodifiableList(tokens);

        }


        public String toString() {

            final StringBuilder sb = new StringBuilder();
            for (String token : tokens) {
                sb.append(token).append('\n');
            }
            return sb.toString();
        }


    }


    /**
     * Do NOT call with NULL/EMPTY arguments.
     *
     * @return NULL if not too similar. False if the FIRST seems superfluous. True if the SECOND seems superfluous.
     */
    private static Boolean areLinesTooSimilar(final String line1,
                                              final String line2) {

        final int l1 = line1.length();
        final int l2 = line2.length();

        final double lenDiffRatio = Math.min(l1, l2) / (double) Math.max(l1, l2); // Results in 1 or less.

        if (lenDiffRatio >= MIN_LENGTH_DIFFERENCE_RATIO) {

            if (l2 < l1) {
                // Compare the other way round.
                if (line1.contains(line2)) {
                    return false;
                }
            } else {
                if (line2.contains(line1)) {
                    return true;
                }
            }

        }

        return null;
    }


    private static List<DumbTokenList> doTheInsaneParsingThing(final File file) {

        final List<DumbTokenList> ret = new ArrayList<>();

        final StringBuilder sb = new StringBuilder();
        try (final InputStream is = new BufferedInputStream(new FileInputStream(file))) {

            final int bufMinus1 = 4;
            final Charset charset = Charset.forName("Cp1252"); // =ansi

            final int[] buf = new int[bufMinus1 + 1]; // "DATA"
            //            while ((buf[buf.length - 1] = is.read()) >= 0) {
            while (true) {

                buf[bufMinus1] = is.read();

                if (buf[bufMinus1] < 0 || (
                        buf[0] == 'D' &&
                                buf[1] == 'A' &&
                                buf[2] == 'T' &&
                                buf[3] == 'A' &&
                                buf[4] == ':')) {

                    if (sb.length() > 0) {
                        ret.add(new DumbTokenList(sb.toString()));
                        sb.setLength(0);
                    }

                    if (buf[bufMinus1] < 0) {
                        break;
                    }

                } else {

                    sb.append(new String(new byte[] { (byte) buf[bufMinus1] }, charset));
                    //                    sb.append((char) buf[bufMinus1]);
                }


                // Shift minibuffer to front.
                for (int i = 0; i < bufMinus1; i++) {
                    buf[i] = buf[i + 1];
                }
            }


        } catch (IOException e) {
            e.printStackTrace();
        }


        // DEDUPLICATE DTLs
        for (int i = ret.size() - 1; i > 0; i--) {

            if (i < ret.size()) {
                final DumbTokenList dtlThis = ret.get(i);
                final int dtlThisTokenCount = dtlThis.tokens.size();

                for (int ii = i - 1; ii >= 0; ii--) {
                    final DumbTokenList dtlThat = ret.get(ii);
                    final int dtlThatTokenCount = dtlThat.tokens.size();


                    int scoreViaRemainingLines_this = dtlThisTokenCount;
                    int scoreViaRemainingLines_that = dtlThatTokenCount;


                    for (int o = 0; o < dtlThisTokenCount; o++) {
                        final String tokenThis = dtlThis.tokens.get(o);
                        for (int oo = 0; oo < dtlThatTokenCount; oo++) {
                            final String tokenThat = dtlThat.tokens.get(oo);

                            final Boolean tooSimilar = areLinesTooSimilar(tokenThis, tokenThat);
                            if (tooSimilar != null) {
                                scoreViaRemainingLines_this--;
                                scoreViaRemainingLines_that--;
                                break;
                            }

                        }
                    }

                    if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {
                        throw new Error();
                    }

                    final double scoreActual_this = scoreViaRemainingLines_this / (double) dtlThisTokenCount;
                    final double scoreActual_that = scoreViaRemainingLines_that / (double) dtlThatTokenCount;


                    if (scoreViaRemainingLines_this < scoreViaRemainingLines_that) {
                        if (scoreActual_this < MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES) {
                            final DumbTokenList removed = ret.remove(i);
                            //                            System.err.println("\nREMOVED:\n" + removed + "\nKEPT   :\n" + dtlThat);
                            break; // IMPORTANT.
                        }
                    } else {
                        if (scoreActual_that < MIN_REMAININGLINES_PERCENTAGEOF_ALLLINES) {
                            final DumbTokenList removed = ret.remove(ii);
                            //                            System.err.println("\nREMOVED:\n" + removed + "\nKEPT   :\n" + dtlThis);
                            break; // IMPORTANT.
                        }
                    }


                }

            }
        }

        return ret;
    }


}

1
এই দৌড়াতে, আমি নিম্নলিখিত কমান্ডগুলি javac "C:\Users\MLM\Downloads\CrappyChromeNotificationHistoryReader.java"(সংকলন করতে), java -cp C:\Users\MLM\Downloads CrappyChromeNotificationHistoryReader(চালাতে) ব্যবহার করেছি, স্ক্রিপ্টটি ব্যর্থ হচ্ছিল if (scoreViaRemainingLines_this < 0 || scoreViaRemainingLines_that < 0) {তাই আমি টোকেন তালিকার সাথে যুক্ত হয়ে সমস্ত পার্সিং আউট করে রেখেছিলাম doTheInsaneParsingThingএবং সমস্ত কিছু মুদ্রণ System.out.println(sb.toString());করে ফেলেছিলাম। দেখে মনে হচ্ছে "প্ল্যাটফর্ম বিজ্ঞপ্তিগুলি" কেবল সার্ভার কর্মী পুশ বিজ্ঞপ্তিগুলি পরিচালনা করে।
এমএলএম

@ এমএমএম: জাভ্যাক তথ্যের জন্য ধন্যবাদ। সমস্যা হিসাবে: আমার জন্য কাজ করে যদি আমি উত্সটি একটি খোলা জাভা 8 ইন্টেলিজ প্রকল্পে পেস্ট করি, আমার ব্যবহারকারীর নাম ("ফাইল" ভেরিয়েবল) রেখেছি এবং কোডটি চালাই।
ড্রিমস্পেসের রাষ্ট্রপতি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.