@@ -82,7 +82,12 @@ func GetDetailedNewsletterData() (*NewsletterData, error) {
8282func getDetailedSubscriberData (newsletters []NewsletterInfo ) (* NewsletterData , error ) {
8383 dbLog := waLog .Stdout ("Database" , "INFO" , true )
8484
85- container , err := sqlstore .New (context .Background (), "sqlite3" , "file:../db/session.db?_foreign_keys=on" , dbLog )
85+ dbPath := os .Getenv ("DB_PATH" )
86+ if dbPath == "" {
87+ dbPath = "file:../db/session.db?_foreign_keys=on"
88+ }
89+
90+ container , err := sqlstore .New (context .Background (), "sqlite3" , dbPath , dbLog )
8691 if err != nil {
8792 return nil , err
8893 }
@@ -193,106 +198,3 @@ func getDetailedSubscriberData(newsletters []NewsletterInfo) (*NewsletterData, e
193198 Newsletters : updatedNewsletters ,
194199 }, nil
195200}
196-
197- func getTotalSubscribers (jidStrs []string ) (int , error ) {
198- dbLog := waLog .Stdout ("Database" , "INFO" , true )
199-
200- container , err := sqlstore .New (context .Background (), "sqlite3" , "file:/root/db/session.db?_foreign_keys=on" , dbLog )
201- if err != nil {
202- return 0 , err
203- }
204-
205- deviceStore , err := container .GetFirstDevice (context .Background ())
206- if err != nil {
207- return 0 , err
208- }
209-
210- clientLog := waLog .Stdout ("Client" , "INFO" , true )
211- client := whatsmeow .NewClient (deviceStore , clientLog )
212-
213- connected := make (chan bool , 1 )
214- reconnecting := make (chan bool , 1 )
215-
216- eventHandler := func (evt interface {}) {
217- switch v := evt .(type ) {
218- case * events.QR :
219- fmt .Println ("QR code received, please scan it with your phone:" )
220- qrterminal .GenerateHalfBlock (v .Codes [0 ], qrterminal .L , os .Stdout )
221- case * events.Connected :
222- fmt .Println ("WhatsApp connected successfully!" )
223- select {
224- case connected <- true :
225- default :
226- }
227- case * events.Disconnected :
228- fmt .Println ("WhatsApp disconnected, reconnecting..." )
229- select {
230- case reconnecting <- true :
231- default :
232- }
233- case * events.LoggedOut :
234- fmt .Println ("WhatsApp logged out" )
235- }
236- }
237- client .AddEventHandler (eventHandler )
238-
239- err = client .Connect ()
240- if err != nil {
241- return 0 , fmt .Errorf ("failed to connect: %v" , err )
242- }
243- defer client .Disconnect ()
244-
245- fmt .Println ("Waiting for WhatsApp connection and synchronization..." )
246- maxWaitTime := 120 * time .Second
247- timeout := time .After (maxWaitTime )
248- connectionStable := false
249-
250- for ! connectionStable {
251- select {
252- case <- connected :
253- fmt .Println ("Connected! Waiting for synchronization to complete..." )
254- stabilityCheck := time .After (10 * time .Second )
255- stable := true
256-
257- stabilityLoop:
258- for stable {
259- select {
260- case <- reconnecting :
261- fmt .Println ("Reconnection detected, waiting for stability..." )
262- stable = false
263- break stabilityLoop
264- case <- stabilityCheck :
265- connectionStable = true
266- break stabilityLoop
267- case <- timeout :
268- return 0 , fmt .Errorf ("timeout waiting for stable connection" )
269- }
270- }
271-
272- case <- reconnecting :
273- continue
274- case <- timeout :
275- return 0 , fmt .Errorf ("timeout waiting for WhatsApp connection" )
276- }
277- }
278-
279- fmt .Println ("WhatsApp connection is stable. Fetching newsletter data..." )
280- time .Sleep (2 * time .Second )
281-
282- var totalSubscribers int
283- for _ , jidStr := range jidStrs {
284- jid , err := types .ParseJID (jidStr )
285- if err != nil {
286- return 0 , err
287- }
288-
289- info , err := client .GetNewsletterInfo (jid )
290- if err != nil {
291- return 0 , fmt .Errorf ("failed to get newsletter info for %s: %v" , jidStr , err )
292- }
293-
294- totalSubscribers += int (info .ThreadMeta .SubscriberCount )
295- }
296-
297- return totalSubscribers , nil
298- }
0 commit comments